C# 检查列表是否相等时,会遇到意外情况

C# 检查列表是否相等时,会遇到意外情况,c#,list,C#,List,目前面临着一个相当。。琐事 我有两个错误处理条件: 一,。如果两个列表不相等,则触发true 例如: 二,。如果cachedList.Length大于newList.Length,则触发true 例如: 检查字符串相等性的第一种方法是: if (!checkEquality(cachedList, newList)) { // do something } 其中,checkEquality是: 这样说,并且可以理解,当一个场景中的条件2被命中,缓存列表大于新列表时,我的两个条件都被命

目前面临着一个相当。。琐事

我有两个错误处理条件:

一,。如果两个列表不相等,则触发true

例如:

二,。如果cachedList.Length大于newList.Length,则触发true

例如:

检查字符串相等性的第一种方法是:

if (!checkEquality(cachedList, newList))
{
    // do something
}
其中,checkEquality是:

这样说,并且可以理解,当一个场景中的条件2被命中,缓存列表大于新列表时,我的两个条件都被命中。不相等和大于条件都会被命中,这会在我的代码中导致不期望的行为

为了在命中错误处理编号2时不满足这两个条件,我需要考虑另一种方法来检测编号1中的不等式

编辑:我决定设置一个条件来检查newList和cachedList的计数是否相等,并且只检查它们的计数相等时是否相等。这是正确的方法吗

public bool checkEquality(List<string> oldFirstList, List<string> newFirstList)
{
    if (oldFirstList.Count == newFirstList.Count)
    {
        if (oldFirstList.SequenceEqual(newFirstList))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    return true;
}

第二个问题是cachedList.Count>newList.Count,这就是if为真的原因

if (cachedList.Count > newList.Count)
{
    // Do something
}
这会起作用,因为这是真实的情况

您的第一个问题是,尝试以下方法:

与此相反:

if (!checkEquality(cachedList, newList))
{
   // do something
}
直接试试这个:

if (cachedList.SequenceEqual(newList))
{
    return true;
}
else
{
    return false;
}

这将返回false

根据SequenceEqual,长度检查已经在那里进行了。除非您除了长度和相等之外没有其他标准,否则没有必要将SequenceEqual包装到您自己的方法中。如果您想比较多个引用,甚至可以定义一种类型的IEqualityComparer。

我不明白为什么您首先使用列表来存储数字,而不是列表或类似的东西。您可以直接返回oldFirstList.SequenceEqualnewFirstList for second testI用于演示此示例。其次,您的所有代码都可以简化为list1.Exceptlist2.Any,如果list1中有任何项目未出现在list2中,则会返回true。啊,我明白了!让我试试。奥斯卡,你的意思是放弃这个方法吗?是的,我的意思是删除你自己的方法,只使用SequenceEqual检查这个。为什么要创建一个已经创建的方法;奥斯卡,我这样做是为了,如果条件是真的,什么也不做,只有当条件是假的时候才做。可以吗?像这样:在if cachedList.SequenceEqualnewList中?如果顺序是相等的,把你的“做某事”,如果它是错误的,或什么也不做,或不要把你的“其他”陈述;我的意思是,如果条件为真,什么都不做可以吗。
if (!checkEquality(cachedList, newList))
{
   // do something
}
if (cachedList.SequenceEqual(newList))
{
    return true;
}
else
{
    return false;
}