List.Contains()的行为与预期不符

时间:2015-07-07 10:41:48

标签: c#

我创建了一个函数来检查客户端系统上安装了哪些软件,然后将信息发送到它检查的服务器,看看软件是否还在系统/数据库上......或者至少那是我的意思想要这个功能。

我目前的功能代码:

public void checkDeadPurposes()
{
    List<string> dbPurposes = new List<string>();
    List<string> syPurposes = new List<string>();

    try
    {
        MySqlCommand cmd = new MySqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "SELECT machinePurpose FROM visualpurposes";
        MySqlDataReader reader = cmd.ExecuteReader();

        while(reader.Read())
        {
            dbPurposes.Add(reader["machinePurpose"].ToString());
        }

        reader.Close();
    } catch (MySqlException e)
    {
        Console.WriteLine(e.ToString());
    }

    try
    {
        foreach(KeyValuePair<string, string> kvp in  purposes)
        {
            syPurposes.Add(kvp.Value);
        }
    } catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }

    try
    {
        Console.WriteLine();
        foreach(string sy in syPurposes)
        {
            if(dbPurposes.Contains(sy))
            {
                Console.WriteLine("Purpose Found");
            } else
            {
                Console.WriteLine("Purpose Not Found");
            }
        }

        Console.WriteLine("\n>>> System Purposes: " + string.Join(",", syPurposes.ToArray()));
        Console.WriteLine(">>> Database Purposes: " + string.Join(",", dbPurposes.ToArray()) + "\n");
    } catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
}

它输出:

Output of function

正如您在输出中看到的那样,应该有“找到一个”和“找不到一个”的输出,但是当找不到某个内容时它似乎没有响应。

这是为什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

系统目的中只有一个项目。

这可以按预期工作。

您确定不想在数据库目的上进行迭代吗?

 foreach(string db in dbPurposes)
    {
        if(syPurposes.Contains(db))
        {
            Console.WriteLine("Purpose Found");
        } else
        {
            Console.WriteLine("Purpose Not Found");
        }
    }