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

C# List.Contains()的行为与预期不符,c#,C#,我已经创建了一个函数来检查客户端系统安装了什么软件,然后将信息发送到它检查的服务器,以查看软件是否仍在系统/数据库中。。。或者至少这是我想要函数做的 我拥有的当前功能代码: public void checkDeadPurposes() { List<string> dbPurposes = new List<string>(); List<string> syPurposes = new List<string>();

我已经创建了一个函数来检查客户端系统安装了什么软件,然后将信息发送到它检查的服务器,以查看软件是否仍在系统/数据库中。。。或者至少这是我想要函数做的

我拥有的当前功能代码:

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());
    }
}
public void checkDeadPurposes()
{
List dbPurposes=new List();
List syPurposes=新列表();
尝试
{
MySqlCommand cmd=新的MySqlCommand();
cmd.Connection=conn;
cmd.CommandText=“从visualpurposes中选择机器用途”;
MySqlDataReader=cmd.ExecuteReader();
while(reader.Read())
{
添加(读卡器[“machinePurpose”].ToString());
}
reader.Close();
}捕获(mysqle异常)
{
Console.WriteLine(如ToString());
}
尝试
{
foreach(KeyValuePair kvp输入)
{
syPurposes.Add(kvp.Value);
}
}捕获(例外e)
{
Console.WriteLine(如ToString());
}
尝试
{
Console.WriteLine();
foreach(sy中的字符串sy)
{
if(dbPurposes.Contains(sy))
{
Console.WriteLine(“目的发现”);
}否则
{
Console.WriteLine(“未找到目的”);
}
}
Console.WriteLine(“\n>>>系统用途:”+string.Join(“,”,syPurposes.ToArray());
Console.WriteLine(“>>>数据库用途:”+string.Join(“,”,dbPurposes.ToArray())+“\n”);
}捕获(例外e)
{
Console.WriteLine(如ToString());
}
}
它输出:

正如您从输出中看到的,应该有“一个已找到”和“一个未找到”的输出,但当未找到某个内容时,它似乎没有响应


为什么会这样?如何修复此问题?

系统中只有一项

这正如预期的那样有效

您确定不想迭代数据库吗

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

@500 InternalServerError,但输出显示,
syPurposes
不是空的,其中包含
Visual Studio
。此代码很难理解且不完整。什么是
用途
以及在哪里填写?代码按预期工作。它在
syPurposes
中循环,其中的单个项在
dbPurposes
中报告。
syPurposes
中没有在
dbPurposes
中找不到的项。是否同意CodeCaster,这是从哪里来的?PurposeCorrect中的KeyValuePair kvp,确实有效。但是为什么它不反过来工作呢?因为syPurposes中只有一项。循环只迭代一次。可能需要将两个列表相交才能获得所有命中率。在使用不同的输入值时,如果该列表较短,则在dbPurposes上迭代可能会出现相同的问题。