[英]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.