Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么<;T>;对于C中的某些扩展方法,将放在方法名称之后#_C#_Generics_Extension Methods_Generic Type Argument - Fatal编程技术网

C# 为什么<;T>;对于C中的某些扩展方法,将放在方法名称之后#

C# 为什么<;T>;对于C中的某些扩展方法,将放在方法名称之后#,c#,generics,extension-methods,generic-type-argument,C#,Generics,Extension Methods,Generic Type Argument,我在看stackoverflow的介绍,以了解更多关于C#扩展方法的信息。我无法理解方法名称后面的部分。更确切地说: public static bool In<T>(this T source, params T[] list) { if(null==source) throw new ArgumentNullException("source"); return list.Contains(source); } 公共静态bool-In(此T源,参数T[]列表) { 如果

我在看stackoverflow的介绍,以了解更多关于C#扩展方法的信息。我无法理解方法名称后面的部分
。更确切地说:

public static bool In<T>(this T source, params T[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}
公共静态bool-In(此T源,参数T[]列表)
{
如果(null==source)抛出新的ArgumentNullException(“source”);
返回列表。包含(来源);
}

我能理解
T
指的是任何类的通用名称。为什么这个扩展方法的方法名后面需要

因为该方法需要是泛型的,以便对任何给定类型的实例进行操作,由
T
表示。
只是告诉编译器这个方法是泛型的,带有一个类型参数
T
。如果不使用它,编译器将把
T
视为实际类型,而出于这个目的,它当然不是。

,因为该方法需要是泛型的,以便对任何给定类型的实例进行操作,由
T
表示。
只是告诉编译器这个方法是泛型的,带有一个类型参数
T
。如果不使用它,编译器将把
T
视为实际类型,而出于这个目的,它当然不是。

T本身并不意味着它是泛型的。如果名称后面有,则意味着它是泛型的,在本例中,您称之为
T

public static bool In<ParameterType>(this ParameterType source, params ParameterType[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}
public static bool In(此参数类型源,参数类型[]列表)
{
如果(null==source)抛出新的ArgumentNullException(“source”);
返回列表。包含(来源);
}

T
本身并不意味着它是通用的。如果名称后面有,则意味着它是泛型的,在本例中,您称之为
T

public static bool In<ParameterType>(this ParameterType source, params ParameterType[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}
public static bool In(此参数类型源,参数类型[]列表)
{
如果(null==source)抛出新的ArgumentNullException(“source”);
返回列表。包含(来源);
}

它允许将此扩展方法应用于任何类型,因为该方法是泛型的。但检查
if(null==source)
假设方法将与引用类型一起工作。实际上,您可能会得到NRE,我建议您添加对空传入列表参数的检查。

它允许将此扩展方法应用于任何类型,因为该方法是泛型的。但检查
if(null==source)
假设方法将与引用类型一起工作。实际上,您可能会得到NRE,我建议您添加对空传入列表参数的检查。

否则它将不是通用的扩展方法。现在,您可以将其用于任何类型。不是
T
表示泛型类型,如果需要,也可以将其称为
TheType
。否则它就不是泛型扩展方法。现在,您可以将其用于任何类型。不是
T
表示泛型类型,如果需要,您也可以将其称为
TheType
。他为什么要检查
null
?如果列表为空,它将引发所需的
NullReferenceException
return list.Contains(source);-若列表为空,他将得到空引用异常(NRE)。如果列表为空,In方法可能返回'false',当然是。同样的情况经常发生,如果有人试图使用
null
执行某项操作,这是他们想要的行为。这只是建议返回false,而不是nre。他为什么要检查
null
?如果列表为空,它将引发所需的
NullReferenceException
return list.Contains(source);-若列表为空,他将得到空引用异常(NRE)。如果列表为空,In方法可能返回'false',当然是。如果有人试图使用
null
执行某项操作,则通常也会发生同样的情况。这只是建议返回false,而不是NRE