我必須動態地分配和改變複雜的對象使用System.Xml.Serialization.XmlAttributeOverrides你能在C#遍歷XmlAttributeOverrides收集
到目前爲止,我已經能夠做的一切,我需要在運行時屬性。
我的一個問題是如何遍歷集合來查看已經添加的內容?
如果我不能通過這個集合進行交互,我可以加入兩個XmlAttributeOverrides集合以形成一個完整集合。
謝謝
我必須動態地分配和改變複雜的對象使用System.Xml.Serialization.XmlAttributeOverrides你能在C#遍歷XmlAttributeOverrides收集
到目前爲止,我已經能夠做的一切,我需要在運行時屬性。
我的一個問題是如何遍歷集合來查看已經添加的內容?
如果我不能通過這個集合進行交互,我可以加入兩個XmlAttributeOverrides集合以形成一個完整集合。
謝謝
不方便,沒有。
您可以通過使用索引獲取類型,您預計價值 - 無論是yourOverrides[type]
或yourOverrides[type, memberName]
- 但得到的列表中的所有裏面的數據就需要反思(它沒有暴露在API)。
通過檢查(雖然這是脆),有一種叫做types
字段是一個Hashtable
(由Type
鍵控)。 Hashtable
中的每個對象都是本身 a Hashtable
(由成員名稱鍵入,""
爲類型自己的設置)。
祝你好運,如果它落在一大堆,當你應用一些修補程序或新的.NET版本不要怪我......
您可以創建一個XmlAttributeOverridesBuilder
類,類似於XmlAttributeOverrides
,這將讓您更好地控制它所包含的XmlAttributes。這樣,您可以在XmlAttributeOverridesBuilder
實例上工作,如果需要將它們組合在一起,並在需要實際的XmlAttributeOverrides
實例時調用GetOverrides
方法。
public class XmlAttributeOverridesBuilder
{
private Dictionary<Type, Dictionary<string, XmlAttributes>> _entries;
public XmlAttributeOverridesBuilder()
{
_entries = new Dictionary<Type, Dictionary<string, XmlAttributes>>();
}
public void Add(Type type, XmlAttributes attributes)
{
Add(type, String.Empty, attributes);
}
public void Add(Type type, string member, XmlAttributes attributes)
{
Dictionary<string, XmlAttributes> typeEntries;
if (!_entries.TryGetValue(type, out typeEntries))
{
typeEntries = new Dictionary<string, XmlAttributes>();
_entries[type] = typeEntries;
}
typeEntries[member] = attributes;
}
public XmlAttributeOverrides GetOverrides()
{
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
foreach(var kvpType in _entries)
{
foreach(var kvpMember in kvpType.Value)
{
overrides.Add(kvpType.Key, kvpMember.Key, kvpMember.Value);
}
}
return overrides;
}
public XmlAttributeOverridesBuilder Combine(XmlAttributeOverridesBuilder other)
{
// combine logic to build a new XmlAttributeOverridesBuilder
// ...
}
}