0

我正在查看 stackoverflow 的答案以了解有关 C# 扩展方法的更多信息。我无法理解<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 回答