Эта ссылка имеет простой пример
Здесь приведены еще более простые примеры
public static IEnumerable<int> testYieldb()
{
for(int i=0;i<3;i++) yield return 4;
}
Обратите внимание, что возвращаемая доходность не вернется из метода. Вы можете даже поставить WriteLine
после yield return
Выше приведено IEnumerable 4 целых 4,4,4,4
Здесь с WriteLine
. Добавьте 4 в список, напечатайте abc, затем добавьте 4 в список, затем завершите метод и, таким образом, действительно вернитесь из метода (как только метод завершится, как это будет происходить с процедурой без возврата). Но это будет иметь значение, IEnumerable
список int
с, которое будет возвращено при завершении.
public static IEnumerable<int> testYieldb()
{
yield return 4;
console.WriteLine("abc");
yield return 4;
}
Обратите внимание, что когда вы используете yield, то, что вы возвращаете, не того же типа, что и функция. Это тип элемента в списке IEnumerable
.
Вы используете yield с типом возврата метода как IEnumerable
. Если тип возвращаемого метода - int
или List<int>
и вы используете yield
, он не скомпилируется. Вы можете использовать IEnumerable
метод возврата типа без yield, но, возможно, вы не можете использовать yield без IEnumerable
метода возврата метода.
И чтобы заставить его исполниться, нужно вызвать его особым образом.
static void Main(string[] args)
{
testA();
Console.Write("try again. the above won't execute any of the function!\n");
foreach (var x in testA()) { }
Console.ReadLine();
}
// static List<int> testA()
static IEnumerable<int> testA()
{
Console.WriteLine("asdfa");
yield return 1;
Console.WriteLine("asdf");
}