【问题标题】:Casting generic class to dynamic type将泛型类转换为动态类型
【发布时间】:2015-04-02 10:50:02
【问题描述】:

我有一个泛型类,我想将其转换为动态泛型,但我收到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 ... }

【问题讨论】:

    标签: c# generics dynamic casting


    【解决方案1】:

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

    但是,您可以创建具有适当泛型类型的新实例并为其赋值:

       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
               };
           }
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多