0

以下に示すように、 ObservableCollection があります。

ObservableCollection<Tuple<Guid, string>> _taskCollection

特定の文字列がコレクションに存在するかどうかを確認するコードを書きたいと思います。文字列は「TaskName」に保持され、私が書いたコードは次のようになります。

_taskCollection.Select(x => x.Item2 == TaskName.Trim()).Any()

私が抱えている問題は、「TaskName」の値がタプルのいずれかにあるかどうかに関係なく、このコード行が常に「true」を返すことです。私が欠けているものを誰かに見せてもらえますか?

4

2 に答える 2

2

Any後ではなく直接使用する必要がありますSelect

_taskCollection.Any(x => x.Item2 == TaskName.Trim())

このコード:

_taskCollection.Select(x => x.Item2 == TaskName.Trim())

boolと同等の長さのリストを返す_taskCollectionので、 を呼び出すとAny、常にtrue

于 2013-02-06T08:33:35.153 に答える
1

SelectN 個の入力項目を N 個の出力項目に変換します。こちらは品数は変わりません。

あなたが望むのは、アイテムをフィルタリングすることです。それWhereがそのためです。

2 番目のクエリを使用Whereするのは正しかったでしょう。

_taskCollection.Where(x => x.Item2 == TaskName.Trim()).Any();

これは次のように短縮できます。

_taskCollection.Any(x => x.Item2 == TaskName.Trim());

その理由はAny、条件を受け入れるオーバーロードを提供するためです。

そして、それは本当に直感的に読めると思います:「どのAnyアイテムが入っ_taskCollectionていItem2 == TaskName.Trim()ますか?」

于 2013-02-06T08:43:55.573 に答える