var numbers=new int[]{1,2,3};
var numbers1=numbers.Select(n=>n);
var numbers2=numbers.Select(n=>n.ToString());
var numbers3=numbers.Select(n=>new {Number=n, Even=n%2==0});
拡張機能SELECTの出力は、どのようなタイプにすることができますか?ラムダ式(拡張機能の選択はどのように定義されていますか)
var numbers=new int[]{1,2,3};
var numbers1=numbers.Select(n=>n);
var numbers2=numbers.Select(n=>n.ToString());
var numbers3=numbers.Select(n=>new {Number=n, Even=n%2==0});
拡張機能SELECTの出力は、どのようなタイプにすることができますか?ラムダ式(拡張機能の選択はどのように定義されていますか)
ここSelect
の特定のバージョンがT
入力(この場合は、int
)の一種であり、TResult
が出力さFunc<T, TResult>
セレクタをとります。ラムダ式に基づいて、コンパイラはTResult
の型を推論できます。あなたのケースでは、タイプは、あなたがそのような無名関数について興味があれば、私はおそらくから始まる、C# 4.0 language specificationをチェックアウトするあなたに奨励
ですセクション7.15。
IEnumerable.Select
はこれらのシグネチャとgeneric methodある:
public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TResult> selector
)
public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, int, TResult> selector
)
渡された関数がTResult
を返す必要とSelect
自体がIEnumerable<TResult>
を返します。 TResult
のタイプはコンパイラによって(ポストで行われているように)推論することも、明示的に注釈を付けることもできます。
ジェネリックの詳細 - どのようにTResult
を「任意の特定のタイプ」にすることができるかは、C# Generics Programming Guideにあります。 C#型推論(ジェネリックの推論を含む)の限界についても議論する多くのSOの質問があります。
ハッピーコーディング。
このテーマが興味のある人は、ここでどのように動作するのかを説明するビデオがあります:http://blogs.msdn.com/b/ericlippert/archive/2006/11/17/a-face-made-for- email-part-three.aspx –