目前面临着一个相当微不足道的问题。
我有两个错误处理条件:
1.
如果两个列表不相等,则触发true
。
例如:
2.
如果true
是cachedList.Length
而不是>
,则触发newList.Length
。
例如:
检查字符串相等性的第一种方法是:
if (!checkEquality(cachedList, newList))
{
// do something
}
checkEquality()
的位置:
public bool checkEquality(List<string> cachedList, List<string> newList)
{
if (cachedList.SequenceEqual(newList))
{
return true;
}
else {
return false;
}
}
我使用的第二种方法是:
if (cachedList.Count > newList.Count)
{
// Do something
}
用这个说,并且理解,当条件没有的情况。如果缓存列表大于新列表,则命中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;
}
答案 0 :(得分:0)
第二个问题是cachedList.Count&gt; 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;
答案 1 :(得分:0)
根据SequenceEqual
的{{3}},已经在那里进行了长度检查。除非您没有除长度和相等之外的其他条件,否则无需将SequenceEqual
包装到您自己的方法中。如果您想要比引用更多,您甚至可以定义IEqualityComparer<T>
类型。