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

Select将 N 个输入项转换为 N 个输出项。这里的项目数量没有变化。

您想要的是过滤项目。这Where就是为了。

使用Where您的第二个查询将是正确的:

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

这可以缩短为以下内容:

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

原因是它Any提供了一个接受条件的重载。

而且我认为它真的很直观地读到:“里面有物品Any吗?”_taskCollectionItem2 == TaskName.Trim()

于 2013-02-06T08:43:55.573 回答