为什么我必须提供明确的通用参数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 } }