嗨,我正在用C#编写一个非常基本的Windows窗体应用程序,需要以最简单的方式来验证多维数组的凭据
string[,] credentials;
credentials = new string[,] { {"name1", "pass"}, {"name2", "pass2"} };
我希望我的textbox1和textbox2使用凭据进行验证
for (int i = 0; i < credentials.GetLength(0); i++)
{
for (int j = 0; j < credentials.GetLength(1); j++)
{
if (textBox1.Text && textBox2.Text == credentials[i,j])
{
MessageBox.Show("Success");
}
}
}
答案 0 :(得分:0)
当您想使其非常简单时,我将使用字典,否则将使用数据库。
Dictionary<string, string> users = Enumerable.Range(0, credentials.GetLength(0)).ToDictionary(i => credentials[i, 0], i => credentials[i, 1]);
if(users[textBox1.Text] != null && users[textBox1.Text] == textBox2.Text){
MessageBox.Show("Success");
}
希望对您有帮助
答案 1 :(得分:0)
您可以执行以下操作:
string[,] credentials = new string[,] { {"name1","pass" },{"name2","pass2" },{"name3","pass3" } };
for (int i = 0; i < credentials.GetLength(0); i++)
{
if(textBox1.Text == credentials[i,0] && textBox2.Text == credentials[i,1]) {
MessageBox.Show("Success");
break;
}
}
您不需要使用两个循环。
这里是dotnetfiddle。
答案 2 :(得分:0)
您可以简化代码,使其仅使用一个循环:
var credentials = new [,] { {"name1", "pass"}, {"name2", "pass2"} };
for (int i = 0; i < credentials.GetLength(0); i++)
{
if (textBox1.Text == credentials[i, 0] && textBox2.Text == credentials[i, 1])
{
MessageBox.Show("Success");
break;
}
}
在找到匹配项后,我还会添加一个休息时间,因为您无需验证其余凭据。
如果您愿意改进,我建议使用元组数组/列表。
将其添加到.cs文件的开头:
// Needed to make .Any() work
using System.Linq;
在您的代码中:
// Credentials has type (string, string)[]
var credentials = new (string name, string pass)[] { ("name1", "pass1"), ("name2", "pass2") };
if (credentials.Any(c => textBox1.Text == c.name && textBox2.Text == c.pass))
{
MessageBox.Show("Success");
}
如果使用C#7.3,甚至可以编写:
credentials.Any(c => c == (textBox1.Text, textBox2.Text))