在C#中在运行时分配属性类型

时间:2018-04-23 09:41:54

标签: c#

我有一个类childNodeValue可以是字符串或List<ChildAttribute>相同的类,如果不支持相同的类,那么另一个具有相同属性的类,而循环我需要将所需的类型分配给{{1 }}。

childNodeValue

如何在运行时在我的波纹管代码中分配类型;

public class ChildAttribute
{
    public int? sequence { get; set; }
    public  Type<T> childNodeValue { get; set; } // string or List<ChildAttribute>
    public int? parentId { get; set; }

}

1 个答案:

答案 0 :(得分:0)

在C#中,您有几个选择:

  1. 将您的媒体资源声明为对象
  2. 将您的媒体资源声明为动态
  3. 使用两个名称不同的属性,一个类型为字符串,另一个类型为列表
  4. 定义一个包含两个属性的新类 ChildrenOrValue 。实现与字符串列表之间的隐式类型转换。
  5. 选项1和2的缺点是,每次尝试访问此属性时都必须检查实际的运行时类型,并在每次使用之前将这些值转换回适当的类型。第四种选择这是最复杂的,可能是一种过度杀伤。

    第三种选择最有意义:

    public class ChildAttribute
    {
        public int? sequence { get; set; }
        public List<ChildAttribute> children { get; set; }
        public string value { get; set; }
        public int? parentId { get; set; }
    }
    

    即使此选项强制您每次要使用这些属性时都要检查哪个属性可用,但它并不要求您向下转换为适当的类型。