2017-03-12 11 views
-1

誰でもこのTuple<object,object>Item1 == Item2は、両方ともItem1Item2の両方がブール値falseの場合にfalseと評価されますか?C#value-typeタプル項目が一致しませんか?

enter image description here

+3

私は注意してください(もし 'そのx == y)trueを返します。それ以外の場合はfalseを返します。 '' return x == y; 'と書かれた方がはるかに簡単です。 –

+0

重複して表示されています。比較しているのは、値そのものではなく、囲み値の_references_です。同じ問題は、マークされた重複のOPが持っていた。彼自身の解決策、すなわち 'Equals()'を使用して、あなたの望むことをする選択肢について、彼の質問に答えます。 –

+0

@PeterDunihoありがとうございます。私は何を検索するのか本当に知りませんでしたが、根本的な原因は同じであることがわかります –

答えて

1

問題は、階層ツリーを横断せず、単純に(仮想優先メソッドではなく演算子であるため)値のタイプを使用するため、==が機能します。関数は参照チェックで関数を呼び出すため、と全く同じオブジェクト(値ではない)でない場合はfalseを返します。

自分の答えで言ったように、彼らはオブジェクトに囲まれています。したがって、この問題を解決するには、C#は(あなたのケースでObjectからBoolean.Equalsの代わりoperator ==だろう)値の最上位の子に行くように問題を修正したEqualsを使用することができます。

var allEqual = together.All(tuple => tuple.Item1.Equals(tuple.Item2)); 
-1

私はそれが理由Boxingのだと確信しています。 Tupleの項目は両方ともobjectであるため、==演算子は参照の比較を実行しています。 Item1は別のobjectにボックス化されているので、==参照比較はfalseを返します。

+3

彼らは箱に*オブジェクトを持っています – pinkfloydx33

+0

@ pinkfloydx33明確化のためにありがとう –

関連する問題