-1

我有一个网站需要从外部 txt 文件中读取数据。我已将该文件放在 App_data 文件夹中,并使用此代码从该文件中读取数据

txt 文件包含 3 个文本。它们是:kevin123 INFO102lec INFO102k

   protected void logInButton_Click(object sender, EventArgs e)
{
    string usernameListString = File.ReadAllText(Server.MapPath("~") + "/App_Data/usernameFile.txt");

    string[] userAray = usernameListString.Split(' ');
    bool usernameExists = false;
    for (int i = 0; i < userAray.Length; i++)
    {
        if (usernameTextBox.Text == userAray[i])
        {
            welcomeLabel.Text = "Welcome" + userAray[i];
        }

        if (usernameTextBox.Text != userAray[i])
        {
            welcomeLabel.Text = "unknown user";
        }

        usernameExists = true;

    }

我想编写一个for循环遍历userArray. 在循环结束时,usernameExists仅当在用户名文本框中输入的用户名存在于数组中时才设置为 true。当我在文本框中输入 1 个这些名称时,我编写了一些代码?如果名称不存在,它会给出一个欢迎标签??反之亦然!

我上面的代码有什么问题吗?

4

5 回答 5

1

您可以为此使用 Linq:

usernameExists = userArray.Any(x => x == usernameTextBox.Text);

此外,在您的示例中,您声明userAray为字符串数组..但您将其用作单个字符串。

于 2013-10-03T04:20:20.137 回答
1

这会起作用:

bool usernameExists = false;
for (int  i = 0; i < userAray.Length; i++)
{
    if (userAray[i] == "kevin123")
    {
        usernameExists = true;
        break; // stop checking more values
    }
}

或者更简单地说:

bool usernameExists = userAray.Contains("kevin123");

或者,如果您想检查数组是否包含多个值中的任何一个:

string[] userNamesToSearchFor = new[] { "kevin123", "INFO102lec", "INFO102k" };
bool usernameExists = userAray.Intersect(userNamesToSearchFor).Any();

关于您的更新,问题是您在遍历数组时尝试更新标签。您需要先确定用户名是否存在于数组中(usernameExists),然后设置表示结果的标签,例如:

for (int  i = 0; i < userAray.Length; i++)
{
    if (userAray[i] == usernameTextBox.Text)
    {
        usernameExists = true;
        break; // stop checking more values
    }
}

if (usernameExists)
{
    welcomeLabel.Text = "Welcome " + usernameTextBox.Text;
}
else 
{
    welcomeLabel.Text = "unknown user";
}
于 2013-10-03T04:21:03.957 回答
1

尝试这个

protected void logInButton_Click(object sender, EventArgs e)
{
string usernameListString = File.ReadAllText(Server.MapPath("~") 
      + "/App_Data/usernameFile.txt");

string[] userAray = usernameListString.Split(' ');
bool usernameExists = false;
for (int  i = 0; i < userAray.Length; i++)
{
    if (userAray[i]==usernameTextBox.Text)
    {
        welcomeLabel.Text = "Welcome" + userAray[i];
        usernameExists = true;
    }
    else
    {
        welcomeLabel.Text = "unknown user";
    }        
}
于 2013-10-03T04:37:40.573 回答
0

尝试:

    bool usernameExists = false;
    for (int  i = 0; i < userAray.Length; i++)
    {
        if (userAray == "kevin123")
        {
          usernameExists =true;
        }
    }
于 2013-10-03T04:23:41.710 回答
0

问题是您需要==并尝试 ReadAllLines 从文件中读取所有行

string[] userAray = File.ReadAllLines();
if (userAray[i] == "kevin123" || userAray[i] == "INFO102lec" || userAray[i] == "INFO102k") 
{
   usernameExists = true;
   break; 
}

Single=用于分配。==是为了比较

于 2013-10-03T04:20:11.780 回答