private static FindMostSpecificField ( |
||
cur1 | ||
cur2 | ||
return | int |
public override FieldInfo BindToField(BindingFlags bindingAttr, FieldInfo[] match, object value, CultureInfo cultureInfo) { if (match == null) { throw new ArgumentNullException("match"); } int num = 0; FieldInfo[] array = (FieldInfo[])match.Clone(); if ((bindingAttr & BindingFlags.SetField) != BindingFlags.Default) { Type type = value.GetType(); for (int i = 0; i < array.Length; i++) { Type fieldType = array[i].FieldType; if (fieldType == type) { array[num++] = array[i]; } else if (value == Empty.Value && fieldType.IsClass) { array[num++] = array[i]; } else if (fieldType == typeof(object)) { array[num++] = array[i]; } else if (fieldType.IsPrimitive) { if (DefaultBinder.CanConvertPrimitiveObjectToType(value, (RuntimeType)fieldType)) { array[num++] = array[i]; } } else if (fieldType.IsAssignableFrom(type)) { array[num++] = array[i]; } } if (num == 0) { throw new MissingFieldException(Environment.GetResourceString("MissingField")); } if (num == 1) { return(array[0]); } } int num2 = 0; bool flag = false; for (int i = 1; i < num; i++) { int num3 = DefaultBinder.FindMostSpecificField(array[num2], array[i]); if (num3 == 0) { flag = true; } else if (num3 == 2) { num2 = i; flag = false; } } if (flag) { throw new AmbiguousMatchException(Environment.GetResourceString("Arg_AmbiguousMatchException")); } return(array[num2]); }
public override FieldInfo BindToField(BindingFlags bindingAttr, FieldInfo[] match, object value, CultureInfo cultureInfo) { if (match == null) { throw new ArgumentNullException("match"); } int num = 0; FieldInfo[] fieldInfoArray = (FieldInfo[])match.Clone(); if ((bindingAttr & BindingFlags.SetField) != BindingFlags.Default) { Type type = value.GetType(); for (int index = 0; index < fieldInfoArray.Length; ++index) { Type fieldType = fieldInfoArray[index].FieldType; if (fieldType == type) { fieldInfoArray[num++] = fieldInfoArray[index]; } else if (value == Empty.Value && fieldType.IsClass) { fieldInfoArray[num++] = fieldInfoArray[index]; } else if (fieldType == typeof(object)) { fieldInfoArray[num++] = fieldInfoArray[index]; } else if (fieldType.IsPrimitive) { if (DefaultBinder.CanConvertPrimitiveObjectToType(value, (RuntimeType)fieldType)) { fieldInfoArray[num++] = fieldInfoArray[index]; } } else if (fieldType.IsAssignableFrom(type)) { fieldInfoArray[num++] = fieldInfoArray[index]; } } if (num == 0) { throw new MissingFieldException(Environment.GetResourceString("MissingField")); } if (num == 1) { return(fieldInfoArray[0]); } } int index1 = 0; bool flag = false; for (int index2 = 1; index2 < num; ++index2) { switch (DefaultBinder.FindMostSpecificField(fieldInfoArray[index1], fieldInfoArray[index2])) { case 0: flag = true; break; case 2: index1 = index2; flag = false; break; } } if (flag) { throw new AmbiguousMatchException(Environment.GetResourceString("Arg_AmbiguousMatchException")); } return(fieldInfoArray[index1]); }