我可以从泛型类中调用扩展方法吗?

时间:2013-07-17 04:54:08

标签: c# generics extension-methods

有没有办法从泛型类中调用扩展,其中变量类也是扩展类?这是一段代码示例。它不编译。

public class GenericFoo<TFrom,TTo>
{
   public TTo GenericFoo(TFrom A)
   {
      return A.Bar();
   }
}

public static class Extensions
{
    public static MyType Bar(this MyExtendedType source)
    {
       return new MyType();
    }
}

这会产生以下错误:

  

'TFrom'不包含'Bar'的定义和最佳扩展名   方法过载   'MyNamespace.Extensions.Bar(MyNamespace.MyExtendedType)'有一些   无效的参数

1 个答案:

答案 0 :(得分:2)

如果添加泛型类型约束

,则可以
public class GenericFoo<TFrom, TTo>
    where TFrom : MyExtendedType
    where TTo : MyType
{
   public TTo SomeMethod(TFrom A)
   {
      return (TTo)A.Bar();
   }
}

这足以让它进行编译,但如果从MyTypeTTo不存在任何强制转换,您仍会遇到运行时错误。

进一步阅读