2016-04-10 36 views
0

IEnumerables我有以下方法:比較簡單相等運算

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? 它是否比較引用或每個對象條件?

回答

0

它只是比較參考。 args != m.Arguments將始終返回true,除非它們引用同一個對象。

如果參數指向另一個對象,即使兩個對象的內容相同,它仍然是true。

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

如果你想兩個可枚舉的內容進行比較,包括它們的順序,你可以使用:

Enumerable.SequenceEqual(args, m.Arguments); 

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

+0

因此,基本上,它的作用是比較參考變量的值? –

+0

感謝您的快速回答! –