我知道我可以调用泛型扩展方法
public static object Convert<U>(this U value)
像这样(不需要<Class1>
):
Class1Instance.Convert()
但有没有办法打电话:
public static T Convert<U, T>(this U value)
where T : Class1, Interface1, new()
where U : Class1, Interface2, new()
{
/******/
}
Class1Instance.Convert<Class2>()
“仅”,而不是Class1Instance.Convert<Class1, Class2>()
谢谢,
编辑:
改革/简化: 有没有办法:
Result result = Convert<Result>(input);
我们知道Input类型的输入,而不必说
Result result = Convert<Input, Result>(input)
使用如下所示的扩展方法:
static TResult Convert<TResult, TInput>(this TInput Input)
答案 0 :(得分:2)
通过在您的主叫代码中指定Convert<U, T>
,无法致电Convert<Class2>
。但是,如果你真的希望调用代码看起来像这样,那么就有可能。
public static T Convert<T>(this Class1 value)
where T : Class1, IClass1, new()
{ ... }
不要在输入类型上使用泛型,只需指定输入类型的父类。这将为您提供所需的调用代码,但它会使方法更复杂。例如,如果转换过程涉及创建新的U
对象(在旧方法定义中使用new()
泛型约束),那么您必须在新方法中使用反射来完成
答案 1 :(得分:0)
根据this post,通用参数推断仅适用于输入参数。在我的例子中,泛型参数之一是返回类型。
由于要求泛型类型推断提供所有这些,我必须明确指定每个参数。