Implementasi All
menurut ILSpy (seperti pada saya benar-benar pergi dan melihat, daripada "well, metode itu bekerja sedikit seperti ..." Saya mungkin lakukan jika kita membahas teori daripada dampaknya).
public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
if (predicate == null)
{
throw Error.ArgumentNull("predicate");
}
foreach (TSource current in source)
{
if (!predicate(current))
{
return false;
}
}
return true;
}
Implementasi Any
menurut ILSpy:
public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
if (predicate == null)
{
throw Error.ArgumentNull("predicate");
}
foreach (TSource current in source)
{
if (predicate(current))
{
return true;
}
}
return false;
}
Tentu saja, mungkin ada beberapa perbedaan halus dalam IL yang dihasilkan. Tapi tidak, tidak ada. IL hampir sama tetapi untuk inversi yang jelas untuk mengembalikan true pada pertandingan predikat versus kembali salah pada predikat mismatch.
Ini hanya linq-untuk-objek saja. Mungkin saja beberapa penyedia linq lain memperlakukan satu jauh lebih baik daripada yang lain, tetapi kemudian jika itu yang terjadi, itu cukup acak mana yang mendapat implementasi yang lebih optimal.
Tampaknya aturan itu hanya berlaku untuk seseorang yang merasa if(determineSomethingTrue)
lebih sederhana dan lebih mudah dibaca daripada if(!determineSomethingFalse)
. Dan dalam keadilan, saya pikir mereka sedikit banyak titik di mana saya sering menemukan if(!someTest)
* membingungkan ketika ada tes alternatif dengan verbositas dan kompleksitas yang sama yang akan kembali benar untuk kondisi yang ingin kita tindak lanjuti. Namun sungguh, secara pribadi saya tidak menemukan apa pun untuk mendukung salah satu dari dua alternatif yang Anda berikan, dan mungkin akan sedikit condong ke yang pertama jika predikatnya lebih rumit.
* Tidak membingungkan karena saya tidak mengerti, tetapi membingungkan karena saya khawatir ada beberapa alasan halus untuk keputusan yang saya tidak mengerti, dan butuh beberapa lompatan mental untuk menyadari bahwa "tidak, mereka hanya memutuskan untuk melakukan dengan begitu, tunggu apa lagi yang saya cari dengan kode ini? ... "