[英]assigning property type at runtime in C#
我有一个其中childNodeValue
可以是字符串或List<ChildAttribute>
类的同一个类,如果不支持相同的类,则另一个具有相同属性的类,在遍历时,我需要将所需的类型分配给childNodeValue
。
public class ChildAttribute
{
public int? sequence { get; set; }
public Type<T> childNodeValue { get; set; } // string or List<ChildAttribute>
public int? parentId { get; set; }
}
我的波纹管代码中如何在运行时分配类型;
foreach (var pItem in pNodes)
{
ParentAttribute pAtt = new ParentAttribute();
pAtt.parentNodeValue = pItem["Attribute"].ToString();
pAtt.id = Convert.ToInt32(pItem["ID"]);
pAtt.ChildNodeValues = new List<ChildAttribute>();
var cNodes = (from cRow in dt.AsEnumerable()
where cRow.Field<decimal?>("Parent_Id") == pAtt.id
select cRow).ToList();
foreach (var cItem in cNodes)
{
ChildAttribute cAtt = new ChildAttribute();
// May be another foreach required here
cAtt.childNodeValue = cItem["Attribute"].ToString();
cAtt.sequence = Convert.ToInt32(!cItem.IsNull("Sequence"));
cAtt.parentId = Convert.ToInt32(!cItem.IsNull("Parent_Id"));
pAtt.ChildNodeValues.Add(cAtt);
}
att.ParentNodes.Add(pAtt);
}
在C#中,您有几个选择:
选项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; }
}
即使此选项强制您每次要使用那些属性时都检查哪个属性可用,它并不需要您向下转换为适当的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.