将泛型类转换为动态类型

时间:2015-04-02 10:50:02

标签: c# generics dynamic casting

我有一个泛型类,我想要转换为动态泛型,但我得到一个Cannot convert type MyGeneric1<MyTypedClass1> to MyGeneric1<dynamic>错误消息。这种演员是否可以dynamic,如果是,请解释。

以下是我尝试将类型MyGeneric1通用类投射到dynamic MyGeneric1的位置。

public static class Extensions
{
    public static MyGeneric1<dynamic> ToDynamic(this MyGeneric1<MyTypedClass1> myObj1)
    {
        return (MyGeneric1<dynamic>)myObj1;
    }
}

MyGeneric1类的定义如下:

public class MyGeneric1<T> : DynamicObject { // Code here ... }

MyTypedClass1类的定义如下:

public class MyTypedClass1: DynamicObject { // Code here ... }

1 个答案:

答案 0 :(得分:0)

MyTypedClass1可以分配给动态,因为它继承自动态。但是,当它们具有不同的泛型参数时,你不能简单地转换泛型类,即使参数本身对于赋值有效(如MyTypedClass1和动态)。

但是,您可以使用适当的泛型类型创建新实例并为其指定值:

   public class MyTypedClass1 : DynamicObject
   {
       public string SomeProperty { get; set; }
   }


   public class MyGeneric<T> : DynamicObject
   {
       // just some property to get the idea
       public T Value { get; set; }
   } 

   public static class MyGenericExtensions
   {
       public static MyGeneric<dynamic> ConveretGeneric(this MyGeneric<MyTypedClass1> argument)
       {
           return new MyGeneric<dynamic>()
           {
               // here you need to assign all needed properties
               Value = argument.Value
           };
       }
   }