Как работает предикат весело без инициализации в C #? - PullRequest
0 голосов
/ 20 ноября 2018

когда я запускаю этот код в консольном приложении, этот код возвращает «звезду», но я не инициализирую индекс в моем предикате.как это работает?есть значение по умолчанию? как?

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);

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Есть две перегрузки из Enumerable.Where:

  1. Один, который принимает регулярный предикат в форме Func<TSource, Boolean> и
  2. , другой, которыйпринимает предикат в форме Func<TSource, Int32, Boolean> и передает элемент и его индекс в предикат.

Ваш код использует вторую перегрузку.

0 голосов
/ 20 ноября 2018

Перегрузка .Where, которую вы вызвали, передаст значение и индекс текущего элемента вашему предикату.

Итак, вы получите

  • «апельсин», 0
  • «яблоко», 1
  • «Артикул», 2
  • "слон", 3
  • "звезда", 4
  • "и", 5

Из них, по совпадению, длина слова звезда равнатакой же, как индекс в вашей последовательности.

...