为什么我必须提供明确的通用参数types而编译器应该推断出types?

为什么我必须提供明确的通用参数types而编译器应该推断出types?

public static T2 Cast<T1,T2>(this T1 arg) where T2 : class where T1 : class { return arg as T2; } 

样本用法:

  objOfTypeT2 = objOfTypeT1.Cast<TypeT1,TypeT2>(); 

与我更喜欢使用更智能的编译器相比,

  objOfTypeT2 = objOfTypeT1.Cast<TypeT2>(); 

或者我应该更聪明:-)

当心我提供了返回types 。 我不想提供我称之为函数的对象,该方法是一个扩展方法

规范将generics方法的types参数推断限制为全部或全部。 你不能有部分的推论。

理由可能是简化types推理规则(这已经非常复杂了,因为它们也必须考虑到过载规则)。

推论不考虑返回types; 但是,您可以尝试分割generics; 例如,您可以编写代码来允许:

 .Cast().To<Type2>() 

有(未经testing;仅供参考)

 public static CastHelper<T> Cast<T>(this T obj) { return new CastHelper<T>(obj); } public struct CastHelper<TFrom> { private readonly TFrom obj; public CastHelper(TFrom obj) { this.obj = obj;} public TTo To<TTo>() { // your code here } }