【问题标题】:Check if item with particular value of a property is present in an array检查具有特定属性值的项目是否存在于数组中
【发布时间】:2013-10-03 04:18:21
【问题描述】:

我有一个网站需要从外部 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 个这些名称时,我编写了一些代码?如果名称不存在,它会给出一个欢迎标签??反之亦然!

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

【问题讨论】:

  • 您似乎开始这样做,然后由于某种原因停止了?

标签: c# arrays for-loop


【解决方案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";
}

【讨论】:

  • 我认为他想检查 3 个名称:kevin123INFO102lecINFO102k
  • 谢谢....当我在文本框中输入这些名称的 1 时,我如何编码?如果名称不存在,它会给出错误??反之亦然!
  • 好的,我有一个文本框名称:usernameTextBox!当我在文本框中输入 kevin123 时,循环开始搜索该名称..并给出一个标签:) 感谢您的帮助
  • @PéBin 不幸的是,这仍然无济于事。我需要确切知道您正在使用什么代码以及您在哪里看到该错误。
【解决方案2】:

您可以为此使用 Linq:

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

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

【讨论】:

    【解决方案3】:

    试试这个

    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";
        }        
    }
    

    【讨论】:

    • 谢谢,但我也想知道当我在 usernameTextBox 中键入 kevin123 时如何编码,它告诉我系统中存在 kevin123?谢谢
    • 只需在 if 条件下将 "kevin123" 替换为 usernameTextBox.Text 即可。然后在标签中显示输出。
    • 并在 else 部分添加代码,以防止与数组中的名称匹配。
    • 我做了你做的......但结果总是名称不存在 ==> label.text = unknown user
    • 是这样的吗? if (userAray[i] == usernameTextBox.Text) { welcomeLabel.Text = "欢迎" + userAray[i];用户名存在=真; } if (userAray[i] != usernameTextBox.Text) { welcomeLabel.Text = "未知用户"; }
    【解决方案4】:

    试试:

        bool usernameExists = false;
        for (int  i = 0; i < userAray.Length; i++)
        {
            if (userAray == "kevin123")
            {
              usernameExists =true;
            }
        }
    

    【讨论】:

      【解决方案5】:

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

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

      单个= 用于分配。 == 用于比较

      【讨论】:

      • Hrmm.. 我只是认为这是 OP 的错字.. 因为代码还是半生不熟。
      猜你喜欢
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2022-06-25
      • 2012-01-14
      相关资源
      最近更新 更多