class Program
{
public static bool IsGreaterThan<T>(T x, T y) where T : IComparable<T>
{
return (x.CompareTo(y) > 0);
}
static void Main(string[] args)
{
var result = IsGreaterThan(20,10);
Console.WriteLine(result);
}
}
只要看到调用像IsGreaterThan(20,10);
这样的泛型方法,那么输入INT就不会传递......那么它是如何工作的呢?他们应该像IsGreaterThan<int>(20,10)
如果方法签名就像public static bool IsGreaterThan<INT>(T x, T y) where T : IComparable<T>
那么,如果我们调用方法而不指定像IsGreaterThan(20,10)这样的类型,那么它是否有效;这条路? ....感谢
答案 0 :(得分:1)
您可以省略type参数,编译器会推断它。
类型推断的相同规则适用于静态方法和实例方法。编译器能够根据您传入的方法参数推断类型参数;它不能仅仅从约束或返回值推断类型参数。因此,类型推断不适用于没有参数的方法。类型推断在编译器尝试解析任何重载方法签名之前的编译时发生。编译器将类型推断逻辑应用于共享相同名称的所有通用方法。在重载解析步骤中,编译器仅包括那些类型推断成功的泛型方法。
http://msdn.microsoft.com/en-us/library/twcad0zb(v=vs.80).aspx
答案 1 :(得分:1)
你应该声明像这样的方法
public static bool IsGreaterThan<T>(T x, T y) where T : IComparable { return (x.CompareTo(y) > 0);
}
否则您将收到编译错误“非泛型声明中不允许出现约束”
要调用该方法,您可以传递类型
var result = IsGreaterThan<int>(20, 10);
Console.WriteLine(result);
如果参数属于同一类型,则可以在调用时忽略Type int。如Jon所解释的,编译器会处理类型解析器