예제 #1
0
 public override int FindProperty(string name)
 {
     if (typeof(ElementType).GetInterfaces().Contains(typeof(INamed)))
     {
         for (int i = 0; i < _data.Count; i++)
         {
             var namedValue = _data[i] as INamed;
             if (string.Equals(namedValue.GetComparableName(), name, StringComparison.InvariantCultureIgnoreCase))
             {
                 return(i);
             }
         }
         return(-1);
     }
     throw RuntimeException.IndexedAccessIsNotSupportedException();
 }
예제 #2
0
        public override void SetIndexedValue(IValue index, IValue value)
        {
            if (!IsIndexed)
            {
                throw RuntimeException.IndexedAccessIsNotSupportedException();
            }

            var member = _instanceType.GetMethod("set_Item", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance);

            if (member == null) // get only?
            {
                throw RuntimeException.IndexedAccessIsNotSupportedException();
            }

            object retValue = member.Invoke(_instance, MarshalArgumentsStrict(new[] { index, value }, GetMethodParametersTypes(member)));
        }
예제 #3
0
        private MethodInfo GetReflectableMethod(int methodNumber)
        {
            MethodInfo methodInfo;

            if (!_methodBinding.TryGetValue(methodNumber, out methodInfo))
            {
                var memberInfo = _membersCache[methodNumber];

                methodInfo      = new MethodInfo();
                methodInfo.Name = memberInfo.Name;

                var reflectedMethod = memberInfo as System.Reflection.MethodInfo;

                if (reflectedMethod != null)
                {
                    methodInfo.IsFunction = reflectedMethod.ReturnType != typeof(void);
                    var reflectionParams = reflectedMethod.GetParameters();
                    FillMethodInfoParameters(ref methodInfo, reflectionParams);
                }
                else
                {
                    var reflectedProperty = memberInfo as System.Reflection.PropertyInfo;
                    if (reflectedProperty != null)
                    {
                        var reflectionParams = reflectedProperty.GetIndexParameters();
                        if (reflectionParams.Length == 0)
                        {
                            throw RuntimeException.IndexedAccessIsNotSupportedException();
                        }

                        methodInfo.IsFunction = reflectedProperty.CanRead;
                        FillMethodInfoParameters(ref methodInfo, reflectionParams);
                    }
                    else
                    {
                        throw RuntimeException.IndexedAccessIsNotSupportedException();
                    }
                }

                _methodBinding.Add(methodNumber, methodInfo);
            }
            return(methodInfo);
        }