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(); }
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))); }
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); }