private void SetValue(MemberName name, object value) { if (_name.IsAttribute) { throw new ArgumentException("這個節點只允許文字資料。"); } if (value == null) { if (XmlRecordDictionary.ContainsKey(name)) { XmlRecordDictionary.Remove(name); } if (ChildrenDictionary.ContainsKey(name)) { ChildrenDictionary.Remove(name); } return; } if (value is XmlObject) { XmlObject dl = value as XmlObject; dl.SetName(name.FullName); XmlRecordDictionary[name] = dl; } else { XmlObject newValue = null; if (value is XmlObject) { newValue = value as XmlObject; if (name.IsAttribute && !newValue._name.IsAttribute) { throw new ArgumentException("這個節點只允許文字資料。"); } //防止自行建立的 XData.Name 與 MemberName 不相同。 //因為是否為 Xml 屬性的資訊在 Name 之中。 newValue._name = name; } else { newValue = new XmlObject(name.FullName) { _string_value = value + "" } }; ChildrenDictionary[name] = newValue; } }
public override bool TryGetMember(GetMemberBinder binder, out object result) { MemberName mn = new MemberName(binder.Name); if (UniqueMode) { if (XmlRecordDictionary.ContainsKey(mn)) { result = GetValues(mn); } else { result = GetValue(mn); } } else { result = (EnsureOneAndReturnLast() as dynamic)[mn.FullName]; } return(true); }