C# 为什么<;T>;对于C中的某些扩展方法,将放在方法名称之后#
我在看stackoverflow的介绍,以了解更多关于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[]列表) { 如果
。更确切地说:
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