私はプログラムで作業していたので、Listoperatorの動作についてちょっと混乱しました。私はリストを持っており、それがいくつかの基準に従ってエントリーを保持しているかどうかを知りたがっています。 は、今度はリストにそれを呼ぼうとOBJ、次のプロパティがありますがpropaは、リスト内の1に等しかったとリストのプロパティがPropCとして持っている場合、それがチェックする必要がある場合c#List.Existsは "false && true"でtrueを返します
public string PropA { get; set; }
public string PropB { get; set; }
public string PropC { get; set; }
public bool HasPropC { get; set; }
は今、私は唯一の真の結果を望んでいましたPropC、そうでなければPropB。 は、私はそれのためのコードのこの部分を使用:
if (List.Exists(x => {
bool b = true;
b = b && x.PropA.Equals(obj.PropA);
b = b && x.HasPropC ? x.PropC.Equals(obj.PropC) : x.PropB.Equals(obj.PropB);
return b;
}))
を持つ最初の行の後に「PropA.Equals ...」bがfalseに設定されました。しかし、それ以来、それは再び真実でした。だから、そうではなくてもオブジェクトがあるように見えました。私はそれのための解決策を見つけた、私は& &オペレータの後に2番目の行を括弧で囲んだが、私はまだそれが真実から成った理由を知らない。
私にこのヒントを教えてもらえますか?
ありがとうございました。式において
これを 'b = b &&(x.HasPropC?x.PropC.Equals(obj.PropC):x.PropB.Equals(obj.PropB));に変更する必要があります。 'x.HasPropC'を呼び出し、それを使って条件のどの部分を実行し、' b'に割り当てるかを決定します。 – juharr