Как исправить «Тело display(List<string>)» не может быть блоком итератора, потому что «string» не является типом интерфейса итератора»?

Я новичок в программировании. Я хотел бы реализовать программу с ключевым словом yield. Итак, я создал new List и попросил пользователя ввести значения списка через консоль.

После этого я добавил foreach к этому списку. И проверил условие, "конкретная ожидаемая строка" присутствует в списке или нет с ключевым словом yield.

Мои ожидания:

  1. Прокрутите существующий список.
  2. Убедитесь, что «TamilSelvi» присутствует в списке с помощью ключевого слова «yield».
  3. Наконец, верните совпадающую строку

Моя реализация:

  1. Я создал список.

  2. установите емкость этого списка на 6.

  3. Получите ввод для пользователя через консоль.

  4. Наконец, проверьте, что введенный пользователем список значений имеет значение «TamilSelvi» или нет, с помощью yield.

     using System;
     using System.Collections.Generic;
     using System.Collections;
    
     namespace yield_Keyword_in_C_Sharp
     {
     class Program
     {
     static void Main(string[] args)
      {
         Console.WriteLine("Implementation of Yield Keyword in C# with 
      List");
         Console.WriteLine();
    
    
         // Create a List
         List<string> names = new List<string>();
         names.Capacity = 6;
    
         Console.WriteLine("Get the Input From the User");
         Console.WriteLine();
    
         //Get the List Input From the User
         foreach (string n in names)
         {
             string temp = Console.ReadLine();
             if (temp.Length != 0 && temp != " " && temp != "  ")
             {
                 names.Add(temp);
                 temp = string.Empty;
             }
         }
    
         //Print the List values entered by the user in the Console Window
         Console.WriteLine("Print the Values Entered by the User");
         Console.WriteLine();
    
         foreach (string na in names)
         {
             Console.WriteLine(na);
         }
         Console.WriteLine();
    
         Console.WriteLine("Get the TamilSelvi in above list with the help 
        of yield keyword");
         display(names);
         void display(List<string> words) // display method implementation
         {
             foreach (string word in words)
             {
                 if (word == "TamilSelvi") yield return word;
             }
         }
    
    
         Console.WriteLine();
    
         Console.ReadLine();
    
     }
     }
     }
    

Ожидаемый результат:

Реализация ключевого слова Yield в C# со списком

Получите информацию от пользователя

Тирунавуккарасу

ТамилСелви

Веннилла

Сабаринатан

Мухупракаш

Мутарасан

Печать значений, введенных пользователем

Тирунавуккарасу

ТамилСелви

Веннилла

Сабаринатан

Мухупракаш

Мутарасан

Получите TamilSelvi в приведенном выше списке с помощью ключевого слова yield

ТамилСелви

Фактический результат: Приложение не удалось построить. Столкнувшись со следующей ошибкой.

Ошибка:

Тело 'display (List words)' не может быть блоком итератора, потому что 'void' не является типом интерфейса итератора.

Метод с Yield должен иметь возвращаемое значение как IEnumerable<T>

Mrinal Kamboj 15.02.2019 07:41

Тип возвращаемого значения pf display function должен быть перечислимым из строки, и вы должны перебирать это возвращаемое значение для правильной работы. Надеюсь, что это поможет вам.

R.Sarkar 15.02.2019 07:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
1 295
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы неправильно используете yield, вам нужно вернуть IEnumerable<T>

IEnumerable<string> display(List<string> words) // display method implementation
{
   foreach (string word in words)
   {
      if (word == "TamilSelvi") yield return word;
   }
}

использование

var result = display(names);

foreach (var name in result)
{
   Console.WriteLine(name);
}

Дополнительные ресурсы

выход (справочник по C#)

Iterator methods and get accessors

The declaration of an iterator must meet the following requirements:

  • The return type must be IEnumerable, IEnumerable, IEnumerator, or IEnumerator.

  • The declaration can't have any in ref or out parameters.

Другие вопросы по теме