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);
     }
 }
Exemple #2
0
 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));
 }