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

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

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

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

  1. Цикл по существующемуlist.
  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();
    
    }
    }
    }
    

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

Реализация ключевого слова доходности в C # со списком

Получите ввод от пользователя

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

ТамилСельви

Веннил

Сабаринатан

Мутхупракаш

Mutharasan

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

Thirunavukkarasu

TamilSelvi

Vennilla

Sabarinathan

Muthuprakash

Mutharasan

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

TamilSelvi

Фактический результат: TheПриложение не может быть построено.Обнаружена следующая ошибка:

Ошибка:

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

1 Ответ

0 голосов
/ 15 февраля 2019

Вы используете неправильный доход, вам нужно вернуть 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);
}

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

yield (C # Reference)

Методы итератора и методы доступа get

ОбъявлениеИтератор должен соответствовать следующим требованиям:

  • Тип возвращаемого значения должен быть IEnumerable, IEnumerable, IEnumerator или IEnumerator.

  • Объявление не можетесть любые в ref или out параметры.

...