這個問題在這里已經有了答案: C# 中使用的 yield 關鍵字是什么? (19 個回答) 昨天關門。
為什么Square()在下面的代碼中再次被呼叫?我想值正在重新計算,但為什么呢?我們得到了values較早的,為什么又被呼叫了?為什么編譯器會發出警告“可能的多重列舉”?
static IEnumerable<int> Square(IEnumerable<int> a)
{
foreach(var r in a)
{
Console.WriteLine($"From Square {r * r}");
yield return r * r;
}
}
class Wrap
{
private static int init = 0;
public int Value
{
get { return init; }
}
}
static void Main(string[] args)
{
var w = new Wrap();
var wraps = new Wrap[3];
for(int i=0; i<wraps.Length; i )
{
wraps[i] = w;
}
var values = wraps.Select(x => x.Value);
var results = Square(values);
int sum = 0;
int count = 0;
foreach(var r in results)
{
count ;
sum = r;
}
Console.WriteLine("Count {0}", count);
Console.WriteLine("Sum {0}", sum);
Console.WriteLine("Count {0}", results.Count());
Console.WriteLine("Sum {0}", results.Sum());
}
結果:
From Square 1
From Square 4
From Square 9
Count 3
Sum 14
From Square 16
From Square 25
From Square 36
Count 3
From Square 49
From Square 64
From Square 81
Sum 194
uj5u.com熱心網友回復:
Square(values)回傳 an IEnumerable,每次訪問時都會對其進行迭代(呼叫)。
如果將結果轉換為 a List(),則結果將具體化為 a List()。
var results = Square(values).ToList();
結果與.ToList()
From Square 1
From Square 4
From Square 9
Count 3
Sum 14
Count 3
Sum 14
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/497405.html
上一篇:如何提高選擇查詢的性能?
