に役立ちます。これを実行するとIQueryable<T>
を直接返すことができ、C#コンパイラは型推論を使用してコンパイル時にT
が何であったかを判断できます。これは、Linq演算子のほとんどが、拡張メソッドとして実装されている以外は、どのように構築されているのかを効果的に示しています。例えば
、その型のデフォルトですリスト内のいずれかを削除する方法を検討:
public static IQueryable<T> FilterDefaults<T>(IQueryable<T> theSet)
{
IQueryable<T> query =
from t in theSet
where t != default(T)
select t;
return query;
}
を使用すると、C#でこれを呼び出すときに型推論を把握することができますので、今、あなたは<T>
をオフに残すことができますコンパイル時にT
はまだ強く型付けされる:
string[] myStrs = { "ABC", null, "", "123", null, "XYZ" };
var theFilteredStrs = FilterDefaults(myStrs);
// should represent the sequence: "ABC", "", "123", "XYZ"
// note null is missing because default(string) is null
int[] myNums = { -1, 0, 3, 0, 42 };
var theFilteredNums = FilterDefaults(myNums);
// should represent the sequence: -1, 3, 42
// note 0 is missing because default(int) is 0
これは基本的なタイプを使用していますが、アイデアは電源である(LINQツーSQLを含む)すべてのLINQの使用のために同じことを動作することを簡単な例でありますLINQのあなたが最終的にLINQ-to-SQLを使用するのか、それともLINQ-to-Objectsだけなのかは気にしません。