0

C# 拡張メソッドについて詳しく知るために、stackoverflowの回答を見ていました。<T>メソッド名の後の部分がわかりませんでした。より正確には:

public static bool In<T>(this T source, params T[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}

T任意のクラスの総称名を参照することは理解できます。<T>この拡張メソッドのメソッド名の後に必要なのはなぜですか?

4

3 に答える 3

2

それT自体が一般的であることを意味するものではありません。名前の後に <> がある場合、それはジェネリックであることを意味し、この場合はジェネリック パラメータを呼び出しますT

public static bool In<ParameterType>(this ParameterType source, params ParameterType[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}
于 2013-05-19T13:16:08.913 に答える
1

で表される特定の型のインスタンスを操作するには、メソッドがジェネリックである必要があるためTです。は、この<T>メソッドが型パラメーターを持つジェネリックであることをコンパイラーに伝えるだけTです。省略した場合、コンパイラはT実際の型として扱いますが、もちろんこの目的ではそうではありません。

于 2013-05-19T13:14:28.680 に答える
1

メソッドはジェネリックであるため、この拡張メソッドを任意の型に適用できます。ただし、チェックif(null==source)では、メソッドが参照型で機能することを前提としています。実際には、NRE が発生する可能性があります。null 着信リスト パラメーターのチェックを追加することをお勧めします。

于 2013-05-19T13:18:26.030 に答える