检查列表相等性时遇到不希望的条件

时间:2014-02-27 16:22:00

标签: c# list

目前面临着一个相当微不足道的问题。

我有两个错误处理条件:

1.如果两个列表不相等,则触发true

例如:

enter image description here

2.如果truecachedList.Length而不是>,则触发newList.Length

例如:

enter image description here

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

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中检测“不等式”的替代方法。

编辑: 我决定设置条件来检查newListcachedList的计数是否相等,并且仅检查他们的统计数相等。这是解决这个问题的正确方法吗?

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;
}

2 个答案:

答案 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>类型。