Verim anahtar kelimesini daha iyi anlamaya çalışıyorum ve bunun hakkında yeterince iyi bir anlayışa sahip olduğumu düşünüyorum, bu yüzden bazı testler yaptım, ancak sonuçlardan dolayı çok şaşırdım.Verim anahtar kelimesini anlamak ve LINQ
ben değil sadece sayıya kadar tümü üzerindeki döngüler gösteriyor ki şu çıktıyı almak için aşağıdaki kodu çalıştırırsanız 4.
public void DoIt()
{
Console.WriteLine("Method Call");
var results = GetData(Enumerable.Range(1, 10));
Console.WriteLine("LINQ");
var filtered = results.Where(x => x == 4);
Console.WriteLine("Start result loop");
foreach (var item in filtered)
{
Console.WriteLine("Item is " + item);
}
}
private IEnumerable<int> GetData(IEnumerable<int> Input)
{
foreach (int item in Input)
{
if (item % 2 == 0)
{
Console.WriteLine("Found " + item);
yield return item;
}
}
}
Çıktı:
Method Call
LINQ
Start result loop
Found 2
Found 4
Item is 4
Found 6
Found 8
Found 10
ise Aşağıdaki kodu çalıştırıyorum, sadece 4'e ulaştığını ve sonra durduğunu gösterir.
public void DoIt()
{
Console.WriteLine("Method Call");
var results = GetData(Enumerable.Range(1, 10));
Console.WriteLine("Start result loop");
foreach (var item in results)
{
if (item == 4)
{
Console.WriteLine("Item is " + item);
break;
}
}
}
private IEnumerable<int> GetData(IEnumerable<int> Input)
{
foreach (int item in Input)
{
if (item % 2 == 0)
{
Console.WriteLine("Found " + item);
yield return item;
}
}
}
Çıktı: Ben bir şey anlaşılmasına değilim ama LINQ bunu yapmasını istediğiniz şeyi tam tersini yapıyor gibi gözükür tahmin
Method Call
Start result loop
Found 2
Found 4
Item is 4
? LINQ verim ve ertelenmiş yürütmeyi de kullansa da, ikinci kod kümesindeki sonuçların ilk kod kümesi için aynı olmasını beklerdim.
'Burada sonuçlar filtrelenir, Bir öğe, yüklemi karşıladığında sonuçları döndürmeyi bırakmaz. Öte yandan, "foreach" elkitabı, yüklenen kişi memnun olduğunda ... –