2多维数组中的值搜索

时间:2018-09-25 13:50:40

标签: c# winforms

嗨,我正在用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");
        }
    }
}

3 个答案:

答案 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))