Eşleşme olmadığında LINQ işlevi ne tam olarak geri döner? Aşağıdaki yöntemi kullanın, örneğin:LINQ sonuçları?
var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);
Bu noktada sonuçlarda ne olurdu?
Eşleşme olmadığında LINQ işlevi ne tam olarak geri döner? Aşağıdaki yöntemi kullanın, örneğin:LINQ sonuçları?
var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);
Bu noktada sonuçlarda ne olurdu?
results
sadece bir sorundur. Bunu (ya da Count()
gibi bir çağrı yoluyla) yinelemeye başlayana kadar, hiçbir sonuç olup olmadığını hiçbir şey kontrol etmedi. Sadece bir şeylerin olacağını söylersen onu numaralandırırsın.
foreach (int x in results)
{
Console.WriteLine("This won't happen");
}
Veya:
Yani yapabileceğini
Console.WriteLine(results.Any()); // Will print false
Console.WriteLine(results.Count()); // Will print 0
Bunlardan herhangi yüklem aralığında her öğenin karşı değerlendirilmesine sebep olur ... ama sonra önce o kazandı hiç çağrılmamalı. o tembel değerlendirme özelliğini korurken results
null
olmayabilir anlamına gelir çünkü
Bu, anlaşılması gereken önemli bir şey -results
, bunun olmadığını çalıştı olmazdı kullanım çalışana kadar null
olmalı ya da değil!
Boş bir başvuru için bir IEnumerable<T>
.
Mükemmel! Aradığım şey bu. Boş olup olmadığını kontrol etmem gerektiğinden emin olmak istedim. – jasonh
Nitpick: Boş bir IEnumerable
Yup güvenli, şekerli iyilik! –
Bu durumda 0 öğeyi içeren IEnumerable<Int32>
değerini döndürür. Sadece bir sorgudur.
Bu, "bilir" gibi ses çıkarır 0 sayısı var - ki yok. Döndürülen değer, yinelenen 0 öğeyi vereceği IEnumerable
@Jon: kesinlikle, açıkladığınız için teşekkürler. Gönderinizde belirttiğiniz gibi, sonucu belirlemek için kullanılmalıdır. –
"results" içinde ne olurdu * sorguyu temsil eden bir nesne *. Unutmayın: sorgu nesnesi, sorgunun sonuçları DEĞİLDİR. Sorgu nesnesi yapabileceğiniz bir şeydir * Sorgunun sonuçlarını almak için yineleyin *, sonuçların kendisi değildir. –