3

我知道我可以调用通用扩展方法

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)
4

2 回答 2

2

无法通过在调用代码中Convert<U, T>指定来调用。Convert<Class2>但是,如果您真的希望调用代码看起来像那样,则有可能。

public static T Convert<T>(this Class1 value) 
  where T : Class1, IClass1, new()
{ ... }

而不是在输入类型上通用,只需指定输入类型的父类。这将为您提供所需的调用代码,但会使方法更加复杂。例如,如果转换过程涉及创建一个新U对象(利用new()旧方法定义中的通用约束),那么您必须在新方法中使用反射来完成。

于 2012-09-24T17:15:44.970 回答
0

根据这篇文章,泛型参数推断仅适用于输入参数。就我而言,通用参数之一是返回类型。

由于泛型类型推断需要提供所有这些,因此我必须明确指定每个参数。

于 2012-09-25T07:11:40.983 回答