3

多くのステートメント(Linqでよく見られる)は、コンパイルまたは実行のいずれにも必要ない場合にTSourceを使用します。なぜTSourceを指定するのですか?

例:

 List<int> list = new List<int>(5) { 0, 1, 2, 0, 3 };

 int x = list.Where<int>(i => i == 0).FirstOrDefault<int>();
 int y = list.Where(i => i == 0).FirstOrDefault();

ステートメントはどのように異なりますか?

4

3 に答える 3

6

両方のLINQステートメントで、TSource型は必須です。

これは、最初のステートメントで明示的に提供され、2番目のステートメントで暗黙的に推測されます。

コンパイラが型を推測できない状況で指定TSourceします。多くの場合、ラムダがネストされていて非常に複雑な場合です。

また、lamdbaで使用されているタイプのスーパータイプを使用して操作を実行する場合。たとえば、から継承するかどうかをFruit推測させるのではなく、タイプを指定できます。AppleAppleFruit

TSource最後に、型を明示的に含めるか、冗長な型の繰り返しを削除することによって、コードを読みやすくするためだけに指定する(または指定しない)ことを選択できます。

于 2012-06-07T10:41:18.747 に答える
1

時々(そして私は時々)定義しないTSourceと、その使用法、つまりラムダ式からその型を検出できないためです。

を指定しないと、このエラーが発生しない場合がありますTSource

あなたの場合、私たちがそれを提供しなくても大丈夫です。

于 2012-06-07T10:40:03.340 に答える
1

多くの場合、それは完全に冗長であり、実際の目的には役立ちません。リファクタリングエンジンのようないくつかのコードツールは、必要がなくても一般的なパラメータを追加するのではないかと思います。

Resharperはそれらに冗長としてフラグを立て、私は通常それらを削除します。それらは貴重な情報を追加せず、(通常)重要なことを文書化しません。

于 2012-06-07T10:41:26.720 に答える