System.DefaultBinder.FindMostSpecificField C# (CSharp) Method

FindMostSpecificField() private static method

private static FindMostSpecificField ( FieldInfo cur1, FieldInfo cur2 ) : int
cur1 System.Reflection.FieldInfo
cur2 System.Reflection.FieldInfo
return int
        private static int FindMostSpecificField(FieldInfo cur1,FieldInfo cur2)
        {
            // Check to see if the fields have the same name.
            if (cur1.Name == cur2.Name)
            {
                int hierarchyDepth1 = GetHierarchyDepth(cur1.DeclaringType);
                int hierarchyDepth2 = GetHierarchyDepth(cur2.DeclaringType);

                if (hierarchyDepth1 == hierarchyDepth2) {
                    BCLDebug.Assert(cur1.IsStatic != cur2.IsStatic, "hierarchyDepth1 == hierarchyDepth2");
                    return 0; 
                }
                else if (hierarchyDepth1 < hierarchyDepth2) 
                    return 2;
                else
                    return 1;
            }

            // The match is ambigous.
            return 0;
        }

Usage Example

        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]);
        }
All Usage Examples Of System.DefaultBinder::FindMostSpecificField