1

私はこのラムダ式を持っています:

if (!myList.Any( x => x.name == "example" && x.articleNumber == "1"))
{

}
else
{

}

myList には、articleNumber、名前、および数量のプロパティを持つクラスのオブジェクトが含まれています。

これは、else の代わりに if に入りますが、名前が「example」AND articleNumber「1」のオブジェクトがあります。なぜこれが起こるのですか?

4

6 に答える 6

4

!ラムダの前に気づいていますか?

if ステートメントで求めているのは

myList に name が example で、かつ article number が 1 の値が含まれていない場合

これが役立つかどうかはわかりませんが、ステートメントで達成したいことについてより多くの情報を提供すると、答えが簡単になるかもしれません.

于 2013-01-04T09:30:24.730 に答える
1

リストには、あなたが考えているエントリが含まれていないと確信しています。if 行にデバッグ マーカーを設定し、その時点でリストを調べて内容を確認します。エントリがないことがわかります。文字列も大文字と小文字が区別されることに注意してください。そのため、name が実際に Example である場合、一致しません。

于 2013-01-04T09:30:38.070 に答える
1

リストには、予期しない値が含まれている可能性があります。

に置き換え&&||、何が得られるかを確認してください。

var v = myList.Where(x => x.name == "example" || x.articleNumber == "1").ToList();

そこにあるものを見るだけです。

于 2013-01-04T10:08:08.333 に答える
1

私が見ることができる唯一の理由は、name=="example"andを持つ要素がないことarticleNumber=="1"です。==演算子は C# では大文字と小文字が区別され、どこかに空白がある可能性があることに注意してください。

次に、このオーバーロードをEquals使用して、大文字と小文字を区別せずに比較し、空白を と削除できTrimます。

if (!myList.Any( x => x.name.Trim().Equals("example", StringComparison.OrdinalIgnoreCase) 
                   && x.articleNumber == "1"))
{

}
else
{

}

articleNumberto は数値であるため、型をtoに変更することも検討する必要がありintます。

于 2013-01-04T09:31:38.337 に答える
0

あなたの論理に問題はありませんが、試すことができますか??

if (myList.Where( x => x.name == "example").Where(x=> x.articleNumber == "1").Count() > 0)
{

}
else
{

}

または、Casing のすべてのスペースとバリアンスを削除します

if (!myList.Any( x => x.name.Trim().ToLower() == "example" && x.articleNumber.Trim().ToLower() == "1"))
{

}
else
{

}
于 2013-01-04T09:30:45.727 に答える
-1

Anyの定義:シーケンスの要素が存在するか、条件を満たすかどうかを決定します。

したがって、シーケンス内の各要素について、述語が式と一致するかどうかが判別されます。

myList.Any( x => x.name == "example" && x.articleNumber == "1")

リストのいずれかの要素の名前が「example」であり、articleNumber 1の場合、trueを返します。

!myList.Any( x => x.name == "example" && x.articleNumber == "1")

リストのNO要素に「example」という名前とarticleNumber1がある場合、trueを返します。

于 2013-01-04T09:36:55.287 に答える