Jah*_*ine 13 .net c# generics type-inference
为什么我必须提供显式泛型参数类型而编译器应该推断出类型?
public static T2 Cast<T1,T2>(this T1 arg) where T2 : class where T1 : class
{
return arg as T2;
}
Run Code Online (Sandbox Code Playgroud)
样品用法:
objOfTypeT2 = objOfTypeT1.Cast<TypeT1,TypeT2>();
Run Code Online (Sandbox Code Playgroud)
与我对更智能的编译器的期望用法相比:
objOfTypeT2 = objOfTypeT1.Cast<TypeT2>();
Run Code Online (Sandbox Code Playgroud)
或者我应该更聪明:-)
请注意,我提供了返回类型.我想不提供我在其上调用函数的对象,该方法是一个扩展方法.
Mar*_*ell 18
推理不考虑返回类型; 但是,你可以尝试拆分泛型; 例如,您可以编写代码以允许:
.Cast().To<Type2>()
Run Code Online (Sandbox Code Playgroud)
通过(未经测试;仅供参考)
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1350 次 |
| 最近记录: |