当我在控制台应用程序中运行此代码时,此代码返回“ star”,但我没有在谓词中初始化索引。这项工作如何?有默认值吗?如何?
Func<String, int, bool> predicate = (str, index) => str.Length == index;
String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
IEnumerable<String> aWords = words.Where(predicate).Select(str => str);
foreach (String word in aWords)
Console.WriteLine(word);
答案 0 :(得分:4)
Enumerable.Where
中有two overloads:
Func<TSource, Boolean>
和Func<TSource, Int32, Boolean>
形式的谓词,并将元素和其索引都传递给。您的代码使用第二个重载。
答案 1 :(得分:3)
您调用的.Where
的重载会将值和当前元素的索引传递给谓词。
所以你得到
巧合的是,其中星号的长度与序列中的索引相同。
答案 2 :(得分:0)
如果要提供数字作为字符谓词,则可以执行以下操作
Func<int,Func<string,bool>> predicate = (numOfCharacters) => (str) => str.Length == numOfCharacters;
然后您可以像这样使用
var aWords = words.Where(predicate(5)); //this will get "apple"