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