聞きたいこと
なぜ yield return false
の場合ループが一度しか実行されないのでしょうか?
yield return true
の場合
以下のようにコンソールに表示されます。
1,2,3と表示されていることからforeachで3回ループした事がわかります。
1 2 3 正常に終了しました。
yield return false
の場合
以下のようにコンソールに表示されます。
1だけが表示されていることからforeachで1回ループした事がわかります。
また、ToArray()を使用するとtrueと同じ結果が得られました。
1
ソースコード
c#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4 5namespace Test 6{ 7 class Program 8 { 9 static IEnumerable<bool> MyMethod(int[] values) 10 { 11 foreach (var x in values) 12 { 13 Console.WriteLine(x); 14 //yield return false; 15 yield return true; 16 } 17 } 18 19 static void Main(string[] args) 20 { 21 var results = MyMethod(new int[] { 1, 2, 3 }); 22 // var results = MyMethod(new int[] { 1, 2, 3 }).ToArray(); 23 24 // 全てtrueかチェックする 25 if (!results.Where(x => !x).Any()) 26 { 27 Console.WriteLine("正常に終了しました。"); 28 } 29 } 30 } 31} 32
環境
- Windows 10 64bit
- .NET Framework 4.6.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。