C# 4.0 使用泛型方法进行类型推断 这是密码 类程序 { 公共静态布尔值大于(tx,ty),其中T:i可比较 { 返回值(x.y)>0; } 静态void Main(字符串[]参数) { var结果=大于(20,10); 控制台写入线(结果); } }
只要看看调用像C# 4.0 使用泛型方法进行类型推断 这是密码 类程序 { 公共静态布尔值大于(tx,ty),其中T:i可比较 { 返回值(x.y)>0; } 静态void Main(字符串[]参数) { var结果=大于(20,10); 控制台写入线(结果); } },c#-4.0,C# 4.0,只要看看调用像isgreetherthan(20,10)这样的通用方法然后类型INT未传递。。。那么它是如何工作的呢?他们应该像大于(20,10) 如果方法签名类似于公共静态bool大于(tx,ty),其中T:IComparable,那么如果我们调用方法而不指定类型类似于IsGreaterThan(20,10),它是否有效;这边谢谢您可以省略类型参数,编译器将推断出它 类型推断的规则同样适用于静态方法和实例方法。编译器能够根据您传入的方法参数推断类型参数;它不能仅从约束或返回值推断类型参数。因此
isgreetherthan(20,10)这样的通用方法代码>然后类型INT未传递。。。那么它是如何工作的呢?他们应该像大于(20,10)
如果方法签名类似于公共静态bool大于(tx,ty),其中T:IComparable
,那么如果我们调用方法而不指定类型类似于IsGreaterThan(20,10),它是否有效;这边谢谢您可以省略类型参数,编译器将推断出它
类型推断的规则同样适用于静态方法和实例方法。编译器能够根据您传入的方法参数推断类型参数;它不能仅从约束或返回值推断类型参数。因此,类型推断不适用于没有参数的方法。类型推断发生在编译器尝试解析任何重载方法签名之前的编译时。编译器将类型推断逻辑应用于共享相同名称的所有泛型方法。在重载解析步骤中,编译器只包括那些类型推断成功的泛型方法
您应该像这样声明方法
公共静态bool大于(tx,ty),其中T:i可比较{return(x.CompareTo(y)>0);
}
否则,您将得到编译错误“非泛型声明上不允许约束”
要调用该方法,可以传递类型
var result = IsGreaterThan<int>(20, 10);
Console.WriteLine(result);
var结果=大于(20,10);
控制台写入线(结果);
但是,如果参数的类型相同,则可以在调用时忽略int类型。编译器负责Jon解释的类型解析器
var result = IsGreaterThan<int>(20, 10);
Console.WriteLine(result);