我有一个FormCollection,我只想遍历不包含字符串“pricing”的键。
所以我尝试了以下方法...
foreach (var key in collection.AllKeys.Where(k => !k.Contains("Pricing"))){ ... }
问题在于返回值不是经过筛选的列表,而是布尔值...我需要经过筛选的字符串列表...
AllKeys返回一个字符串数组,因此在某种意义上,我只是想在这里过滤一个字符串数组...
我缺少什么呢...
非常感谢!
下面是答案...
foreach (var key in collection.AllKeys.Where(k => !k.Contains("Pricing")).ToArray<string>()){ ... }
Where
而不是 Select
吗?Where
将返回一个 IEnumerable<string>
,这正是你所期望的。Select
将返回一个 IEnumerable<bool>
,这正是你所说的实际发生的事情。IEnumerable<string>
上调用 ToArray<string>
。 Where
调用的返回类型必须为 IEnumerable<string>
,否则您的 ToArray
调用也无法编译。 - LukeH
foreach
循环中声明的key
变量是string
类型的,因为Where
扩展方法返回的是IEnumerable<string>
,所以你指出这段代码无法得到布尔值是正确的。 - Darin Dimitrovstring.Contains(string)
方法是区分大小写的。这可能是问题所在吗? - Darin Dimitrov