Exemplo n.º 1
0
 /// <summary>为获取成员值的操作提供实现。从 <see cref="T:System.Dynamic.DynamicObject" /> 类派生的类可以重写此方法,以便为诸如获取属性值这样的操作指定动态行为。</summary>
 /// <param name="binder">提供有关调用了动态操作的对象的信息。binder.Name 属性提供针对其执行动态操作的成员的名称。例如,对于 Console.WriteLine(sampleObject.SampleProperty) 语句(其中 sampleObject 是派生自 <see cref="T:System.Dynamic.DynamicObject" /> 类的类的一个实例),binder.Name 将返回“SampleProperty”。binder.IgnoreCase 属性指定成员名称是否区分大小写。</param>
 /// <param name="result">获取操作的结果。例如,如果为某个属性调用该方法,则可以为 <paramref name="result" /> 指派该属性值。</param>
 /// <returns>如果此运算成功,则为 true;否则为 false。如果此方法返回 false,则该语言的运行时联编程序将决定行为。(大多数情况下,将引发运行时异常。)</returns>
 public override bool TryGetMember(GetMemberBinder binder, out object result)
 {
     result = null;
     if (binder.Name == "Value")
     {
         result = _elements[0].Value;
     }
     else if (binder.Name == "Count")
     {
         result = _elements.Count;
     }
     else
     {
         var attr = _elements[0].Attribute(XName.Get(binder.Name));
         if (attr != null)
         {
             result = attr;
         }
         else
         {
             var items = _elements.Descendants(XName.Get(binder.Name));
             if (items == null || items.Count() == 0)
             {
                 return(false);
             }
             result = new DynamicXml(items);
         }
     }
     return(true);
 }
Exemplo n.º 2
0
        /// <summary>为按索引获取值的操作提供实现。从 <see cref="T:System.Dynamic.DynamicObject" /> 类派生的类可以重写此方法,以便为索引操作指定动态行为。</summary>
        /// <param name="binder">提供有关该操作的信息。</param>
        /// <param name="indexes">该操作中使用的索引。例如,对于 C# 中的 sampleObject[3] 操作(Visual Basic 中为 sampleObject(3))(其中 sampleObject 派生自 DynamicObject 类),<paramref name="indexes[0]" /> 等于 3。</param>
        /// <param name="result">索引操作的结果。</param>
        /// <returns>如果此运算成功,则为 true;否则为 false。如果此方法返回 false,则该语言的运行时联编程序将决定行为。(大多数情况下,将引发运行时异常。)</returns>
        public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
        {
            int ndx = (int)indexes[0];

            result = new DynamicXml(_elements[ndx]);
            return(true);
        }