将IEnumerables与简单的相等运算符进行比较

时间:2016-04-10 10:56:41

标签: c# .net compare ienumerable

我有以下方法:

internal virtual Expression VisitMethodCall(MethodCallExpression m)
    {
        var obj = Visit(m.Object);
        IEnumerable<Expression> args = VisitExpressionList(m.Arguments);
        if (obj != m.Object
            || args != m.Arguments)
        {
            return Expression.Call(obj, m.Method, args);
        }
        return m;
    }

问题是:在哪些情况下 args!= m.Arguments 会返回true? 它是否也比较了引用或每个对象条件?

1 个答案:

答案 0 :(得分:0)

它只是比较参考。 args != m.Arguments将始终返回true,除非它们引用同一个对象。

如果args引用另一个对象,即使两个对象的内容相同,它仍然是真的。

IEnumerable<Expression> args = m.Arguments.ToList();
bool result = args != m.Arguments; // true

如果您想比较两个可用数据的内容,包括它们的顺序,您可以使用:

Enumerable.SequenceEqual(args, m.Arguments);

更多信息:https://stackoverflow.com/a/3670089/848765