没有在C#中初始化的情况下,工作谓词如何有趣?

时间:2018-11-20 10:12:17

标签: c# predicate func

当我在控制台应用程序中运行此代码时,此代码返回“ 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);

3 个答案:

答案 0 :(得分:4)

Enumerable.Where中有two overloads

  1. 一个采用Func<TSource, Boolean>
  2. 形式的正则谓词
  3. 另一种,它采用Func<TSource, Int32, Boolean>形式的谓词,并将元素和其索引都传递给

您的代码使用第二个重载。

答案 1 :(得分:3)

您调用的.Where的重载会将值和当前元素的索引传递给谓词。

所以你得到

  • “橙色”,0
  • “苹果”,1
  • “文章”,第2
  • “大象”,3
  • “星”,4
  • “和”,5

巧合的是,其中星号的长度与序列中的索引相同。

答案 2 :(得分:0)

如果要提供数字作为字符谓词,则可以执行以下操作

Func<int,Func<string,bool>> predicate = (numOfCharacters) => (str) => str.Length == numOfCharacters;

然后您可以像这样使用

var aWords = words.Where(predicate(5)); //this will get "apple"