internal override IEnumerable <Type> GetChildTypes() { foreach (MemberBinding binding in this._initExpression.Bindings) { Type memberType; string name; TypeSystem.PropertyOrField(binding.Member, out name, out memberType); yield return(memberType); } }
internal override IEnumerable <Type> GetChildTypes() { // return all argument types foreach (var binding in _initExpression.Bindings) { // determine member type Type memberType; string name; TypeSystem.PropertyOrField(binding.Member, out name, out memberType); yield return(memberType); } }
internal static MemberInfo PropertyOrField( MemberInfo member, out string name, out Type type) { name = (string)null; type = (Type)null; if (member.MemberType == MemberTypes.Field) { FieldInfo fieldInfo = (FieldInfo)member; name = fieldInfo.Name; type = fieldInfo.FieldType; return((MemberInfo)fieldInfo); } if (member.MemberType == MemberTypes.Property) { PropertyInfo propertyInfo = (PropertyInfo)member; if (propertyInfo.GetIndexParameters().Length != 0) { throw new NotSupportedException(Strings.ELinq_PropertyIndexNotSupported); } name = propertyInfo.Name; type = propertyInfo.PropertyType; return((MemberInfo)propertyInfo); } if (member.MemberType == MemberTypes.Method) { MethodInfo methodInfo = (MethodInfo)member; if (methodInfo.IsSpecialName) { foreach (PropertyInfo runtimeProperty in methodInfo.DeclaringType.GetRuntimeProperties()) { if (runtimeProperty.CanRead && runtimeProperty.Getter() == methodInfo) { return(TypeSystem.PropertyOrField((MemberInfo)runtimeProperty, out name, out type)); } } } } throw new NotSupportedException(Strings.ELinq_NotPropertyOrField((object)member.Name)); }