有没有一种方法可以从泛型类(其中变量类也是扩展类)中调用扩展?这是示例代码。它不会编译。

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)'有一些
  无效的论点

最佳答案

您可以添加通用类型约束:

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


尽管如果没有从MyTypeTTo的强制类型转换,仍然会出现运行时错误,但这足以使其编译。

进一步阅读


where (generic type constraint) (C# Reference)

08-18 12:22