Beispiel #1
0
 public void TestParseEx()
 {
     for (int i = 0; i < 150; i++)
     {
         BindingFlags value = (BindingFlags)i;
         Assert.AreEqual(value, EnumExt.ParseEx <BindingFlags>(value.ToString()));
         Assert.AreEqual(value, EnumExt.ParseEx <BindingFlags>(value.GetDescription()));
     }
     Assert.AreEqual((TestEnum)0, EnumExt.ParseEx <TestEnum>("  0"));
     Assert.AreEqual(TestEnum.A, EnumExt.ParseEx <TestEnum>("A "));
     Assert.AreEqual(TestEnum.A, EnumExt.ParseEx <TestEnum>("-1 "));
     Assert.AreEqual(TestEnum.A, EnumExt.ParseEx <TestEnum>("A Des"));
     Assert.AreEqual(TestEnum.B, EnumExt.ParseEx <TestEnum>(" B "));
     Assert.AreEqual(TestEnum.B, EnumExt.ParseEx <TestEnum>(" -2 "));
     Assert.AreEqual(TestEnum.B, EnumExt.ParseEx <TestEnum>("B Des"));
     Assert.AreEqual(TestEnum.C, EnumExt.ParseEx <TestEnum>("C"));
     Assert.AreEqual(TestEnum.C, EnumExt.ParseEx <TestEnum>("-3"));
     Assert.AreEqual(TestEnum.C, EnumExt.ParseEx <TestEnum>("C Des"));
     Assert.AreEqual(TestEnum.D, EnumExt.ParseEx <TestEnum>("D"));
     Assert.AreEqual(TestEnum.D, EnumExt.ParseEx <TestEnum>("-4"));
     Assert.AreEqual(TestEnum.D, EnumExt.ParseEx <TestEnum>("D Des"));
     Assert.AreEqual(TestEnum.E, EnumExt.ParseEx <TestEnum>("-5"));
     Assert.AreEqual(TestEnum.E, EnumExt.ParseEx <TestEnum>("E"));
     Assert.AreEqual((TestEnum2)0, EnumExt.ParseEx <TestEnum2>("0"));
     Assert.AreEqual(TestEnum2.A, EnumExt.ParseEx <TestEnum2>("  A "));
     Assert.AreEqual(TestEnum2.A, EnumExt.ParseEx <TestEnum2>("  1 "));
     Assert.AreEqual(TestEnum2.A, EnumExt.ParseEx <TestEnum2>("A Des"));
     Assert.AreEqual(TestEnum2.B, EnumExt.ParseEx <TestEnum2>("B "));
     Assert.AreEqual(TestEnum2.B, EnumExt.ParseEx <TestEnum2>(" +2 "));
     Assert.AreEqual(TestEnum2.B, EnumExt.ParseEx <TestEnum2>("B Des"));
     Assert.AreEqual(TestEnum2.C, EnumExt.ParseEx <TestEnum2>("C "));
     Assert.AreEqual(TestEnum2.C, EnumExt.ParseEx <TestEnum2>("   +4   "));
     Assert.AreEqual(TestEnum2.C, EnumExt.ParseEx <TestEnum2>("C Des"));
     Assert.AreEqual(TestEnum2.D, EnumExt.ParseEx <TestEnum2>("D "));
     Assert.AreEqual(TestEnum2.D, EnumExt.ParseEx <TestEnum2>("0008"));
     Assert.AreEqual(TestEnum2.D, EnumExt.ParseEx <TestEnum2>("D"));
     Assert.AreEqual(TestEnum2.AB, EnumExt.ParseEx <TestEnum2>("AB Des"));
     Assert.AreEqual(TestEnum2.AB, EnumExt.ParseEx <TestEnum2>("A,B Des"));
     Assert.AreEqual(TestEnum2.AB, EnumExt.ParseEx <TestEnum2>("1,2"));
     Assert.AreEqual(TestEnum2.AB, EnumExt.ParseEx <TestEnum2>("3"));
     Assert.AreEqual(TestEnum2.AB, EnumExt.ParseEx <TestEnum2>("A Des    ,   B Des"));
     Assert.AreEqual(TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("BC Des    "));
     Assert.AreEqual(TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("2, 4, 2, 4,C Des    "));
     Assert.AreEqual(TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("C Des    ,   B Des"));
     Assert.AreEqual(TestEnum2.A | TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("C Des    ,   B Des, A Des"));
     Assert.AreEqual(TestEnum2.A | TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("4    ,   B Des, A Des, 3"));
     Assert.AreEqual(TestEnum2.A | TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("7"));
     Assert.AreEqual(TestEnum2.A | TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("BC Des    ,   , A Des"));
     Assert.AreEqual(TestEnum2.A | TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("AB Des    ,    C Des"));
     Assert.AreEqual(TestEnum2.D | TestEnum2.BC, EnumExt.ParseEx <TestEnum2>("BC Des    ,    D"));
     Assert.AreEqual(TestEnum2.All, EnumExt.ParseEx <TestEnum2>("BC Des,A Des,D"));
     Assert.AreEqual(TestEnum2.All, EnumExt.ParseEx <TestEnum2>("15"));
     Assert.AreEqual(TestEnum2.All, EnumExt.ParseEx <TestEnum2>("+1,+2,  , 4, 8, "));
     Assert.AreEqual(TestEnum2.All, EnumExt.ParseEx <TestEnum2>("All Des"));
     Assert.AreEqual(TestEnum2.All, EnumExt.ParseEx <TestEnum2>("BC Des,AB Des,D"));
     Assert.AreEqual(TestEnum2.All | (TestEnum2)128, EnumExt.ParseEx <TestEnum2>("BC Des,AB Des,D, 128"));
     Assert.AreEqual(TestEnum2.All | (TestEnum2)128, EnumExt.ParseEx <TestEnum2>("15, 128"));
     Assert.AreEqual(TestEnum2.All | (TestEnum2)128, EnumExt.ParseEx <TestEnum2>("143"));
     Assert.AreEqual(TestEnum2.All | (TestEnum2)128, EnumExt.ParseEx <TestEnum2>("BC Des,AB Des,D,+128"));
 }
Beispiel #2
0
        /// <summary>
        /// Выполнить метод methodName у объекта
        /// </summary>
        /// <param name="obj">объект</param>
        /// <param name="methodName">имя метода</param>
        /// <param name="bindingFlags">условие поиска метода</param>
        /// <param name="args">аргументы выполняемого метода</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="Exception"></exception>
        /// <returns></returns>
        public static object GetMethodValue(this object obj, string methodName, BindingFlags bindingFlags,
                                            params object[] args)
        {
            if (obj == null)
            {
                ExceptionGenerator.Run <ArgumentNullException>("Аргумент \"obj\" равен null");
            }

            if (String.IsNullOrEmpty(methodName))
            {
                ExceptionGenerator.Run <ArgumentNullException>("Аргумент \"methodName\" равен null или пустой");
            }

            Type type = obj.GetType();

            try {
                MethodInfo methodInfo = null;
                methodInfo = type.GetMethod(methodName, bindingFlags);
                if (methodInfo == null)
                {
                    ExceptionGenerator.Run <ArgumentNullException>("Метод \"{0}\" в объекте типа \"{1}\" не найдено по условиям поиска \"{2}\"",
                                                                   methodName, type, bindingFlags.ToString());
                }

                return(methodInfo.Invoke(obj, args));
            }
            catch (Exception ex) {
                throw ExceptionGenerator.Run(ex,
                                             "Ошибка при выполнения метода \"{0}\" объекте типа \"{1}\"",
                                             methodName, type);
            }
        }
Beispiel #3
0
 public void TestGetDescription()
 {
     for (int i = 0; i < 129; i++)
     {
         BindingFlags value = (BindingFlags)i;
         Assert.AreEqual(value.ToString(), value.GetDescription());
     }
     Assert.AreEqual("0", ((TestEnum)0).GetDescription());
     Assert.AreEqual("A Des", TestEnum.A.GetDescription());
     Assert.AreEqual("B Des", TestEnum.B.GetDescription());
     Assert.AreEqual("C Des", TestEnum.C.GetDescription());
     Assert.AreEqual("D Des", TestEnum.D.GetDescription());
     Assert.AreEqual("E", TestEnum.E.GetDescription());
     Assert.AreEqual("0", ((TestEnum2)0).GetDescription());
     Assert.AreEqual("A Des", TestEnum2.A.GetDescription());
     Assert.AreEqual("B Des", TestEnum2.B.GetDescription());
     Assert.AreEqual("C Des", TestEnum2.C.GetDescription());
     Assert.AreEqual("D", TestEnum2.D.GetDescription());
     Assert.AreEqual("AB Des", TestEnum2.AB.GetDescription());
     Assert.AreEqual("BC Des", TestEnum2.BC.GetDescription());
     Assert.AreEqual("A Des, BC Des", (TestEnum2.BC | TestEnum2.A).GetDescription());
     Assert.AreEqual("BC Des, D", (TestEnum2.BC | TestEnum2.D).GetDescription());
     Assert.AreEqual("All Des", TestEnum2.All.GetDescription());
     Assert.AreEqual("All Des, 128", (TestEnum2.All | (TestEnum2)128).GetDescription());
 }
Beispiel #4
0
        public static void PrintAllFields(this Type type, BindingFlags flags)
        {
            FieldInfo[] fields = type.GetFields();
            for (int i = 0; i < fields.Length; i++)
            {
                Debug.Log(fields[i].Name + ", field, " + flags.ToString());
            }

            PropertyInfo[] props = type.GetProperties(flags);
            for (int i = 0; i < props.Length; i++)
            {
                Debug.Log(props[i].Name + ", property, " + flags.ToString());
            }

            MethodInfo[] methods = type.GetMethods(flags);
            for (int i = 0; i < methods.Length; i++)
            {
                Debug.Log(methods[i].Name + ", method, " + flags.ToString());
            }
        }
        private void AddScopeFilterButton(GameObject parent, BindingFlags flags, bool setAsActive = false)
        {
            string lbl   = flags == BindingFlags.Default ? "All" : flags.ToString();
            var    color = setAsActive ? enabledButtonColor : disabledButtonColor;

            var button = UIFactory.CreateButton(parent, "Filter_" + flags, lbl, color);

            UIFactory.SetLayoutElement(button.Component.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 70, flexibleWidth: 0);
            scopeFilterButtons.Add(flags, button);

            button.OnClick += () => { SetFilter(flags); };
        }
Beispiel #6
0
            private static string GetKey(string name, BindingFlags flags, params Type[] types)
            {
                StringBuilder sb = new StringBuilder(name);

                sb.Append("_").Append(flags.ToString());

                types?.ForEach(t =>
                {
                    sb.Append("_")
                    .Append(t.GUID);
                });

                return(sb.ToString());
            }
Beispiel #7
0
        /// <summary>
        /// Gets the property information.
        /// </summary>
        /// <param name="propertyName">Name of the property.</param>
        /// <param name="bindingFlags">The binding flags.</param>
        /// <param name="type">The type.</param>
        /// <param name="throwExceptionWhenNotFound">Throw exception when property not found.</param>
        /// <returns>The property info.</returns>
        internal static PropertyInfo GetPropertyInfo(string propertyName, BindingFlags bindingFlags, Type type, bool throwExceptionWhenNotFound = true)
        {
            PropertyInfo propertyInfo = type.GetProperty(propertyName, bindingFlags);

            if (propertyInfo == null && throwExceptionWhenNotFound)
            {
                throw new ReflectionHelperException(string.Format(CultureInfo.CurrentCulture, Strings.ReflectionHelper_GetPropertyInfo_property_couldnot_be_found, propertyName, type.AssemblyQualifiedName))
                      {
                          Data = { { "BindingFlags", bindingFlags.ToString() } }
                      };
            }

            return(propertyInfo);
        }
 public override EventInfo GetEvent(string name, BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetEvent: {0}, {1}", name, bindingAttr.ToString());
     return null;
 }
Beispiel #9
0
 public override PropertyInfo[] GetProperties(BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetProperties: {0}", bindingAttr.ToString());
     return(new PropertyInfo[] { });
 }
Beispiel #10
0
 public override MethodInfo[] GetMethods(BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetMethods: {0}", bindingAttr.ToString());
     return(new MethodInfo[] {});
 }
Beispiel #11
0
 public override EventInfo[] GetEvents(BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetEvents: {0}", bindingAttr.ToString());
     return(new EventInfo[] {});
 }
Beispiel #12
0
 public override EventInfo GetEvent(string name, BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetEvent: {0}, {1}", name, bindingAttr.ToString());
     return(null);
 }
Beispiel #13
0
 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetConstructors: {0}", bindingAttr.ToString());
     return(new ConstructorInfo[] { });
 }
Beispiel #14
0
        private void CtorSimplestTestTypeBase(IConstructorComponent testing, Type t, BindingFlags flags)
        {
            var expecting = t.GetConstructors(flags).OrderBy(a => a.GetParameters().Count()).FirstOrDefault();

            var actual = _.Object.Constructor.Simplest(t, flags);

            Assert.AreEqual(expecting, actual, string.Format("Failed on {0} , {1}", t.Name, flags.ToString()));
        }
Beispiel #15
0
    private void ShowFields(string hierarchy, Type targetType, object container, BindingFlags bindingAttr)
    {
        EditorGUI.indentLevel++;

        {
            FieldInfo[] fields = targetType.GetFields(bindingAttr);
            if (fields.Length > 0)
            {
                EditorGUILayout.LabelField(bindingAttr.ToString());
                foreach (FieldInfo field in fields)
                {
                    if (field.DeclaringType == targetType)
                    {
                        bool editable = !field.IsLiteral && (editPrivate || field.IsPublic);
                        object value = field.GetValue(container);
                        object newValue = ShowKeyValue(hierarchy, field.Name, field.FieldType, value, editable);
                        if (editable && value != newValue)
                        {
                            field.SetValue(container, newValue);
                        }
                    }
                }
            }
        }

        if (showProperty)
        {
            PropertyInfo[] fields = targetType.GetProperties(bindingAttr);
            if (fields.Length > 0)
            {
                EditorGUILayout.LabelField(bindingAttr.ToString());
                foreach (PropertyInfo field in fields)
                {
                    if (field.DeclaringType == targetType)
                    {
                        if (field.CanRead)
                        {
                            MethodInfo getter = field.GetGetMethod();
                            if (getter != null && getter.GetParameters().Length == 0)
                            {
                                object value = getter.Invoke(container, null);
                                ShowKeyValue(hierarchy, field.Name, field.DeclaringType, value, false);
                            }
                        }
                    }
                }
            }
        }

        EditorGUI.indentLevel--;
    }
 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetConstructors: {0}", bindingAttr.ToString());
     return new ConstructorInfo[] { };
 }
Beispiel #17
0
        public object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] argsOrig, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
        {
            // Unwrap any AutoWrap'd objects (they need to be raw if a paramater)
            if (name == "[DISPID=-4]")
            {
                IEnumVARIANT rez = new EnumVariantImpl(((IEnumerable)O).GetEnumerator());
                return(rez);
            }

            object[] args = ПолучитьМассивРеальныхОбъектов(argsOrig);
            if (culture == null)
            {
                culture = CultureInfo.InvariantCulture;
            }

            object obj;

            try
            {
                if (T.IsEnum && !((invokeAttr & BindingFlags.InvokeMethod) == BindingFlags.InvokeMethod))
                {
                    return(ОбернутьОбъект(Enum.Parse(T, name)));
                }

                ПроверитьНаДоступКПолям(ref invokeAttr, args.Length);

                if (ЭтоТип)
                {
                    obj = T.InvokeMember(name, invokeAttr, binder, null, args, modifiers, culture, namedParameters);
                }
                else if (ЭтоExpandoObject)
                {
                    if (invokeAttr.HasFlag(BindingFlags.InvokeMethod) && МетодыObject.ContainsKey(name))
                    {
                        obj = T.InvokeMember(name, invokeAttr, binder, O, args, modifiers, culture, namedParameters);
                    }
                    else
                    {
                        obj = InvokeMemberExpandoObject(name, invokeAttr, args);
                    }
                }
                else
                {
                    obj = T.InvokeMember(name, invokeAttr, binder, O, args, modifiers, culture, namedParameters);
                }
            }
            catch (Exception e)
            {
                ПоследняяОшибка = e;
                string Ошибка = "Ошибка в методе " + name + " " + e.Message + " " + e.Source;

                if (e.InnerException != null)
                {
                    Ошибка = Ошибка + "\r\n" + e.InnerException;
                }

                if (ВыводитьСообщениеОбОшибке)
                {
                    MessageBox.Show(Ошибка);
                    MessageBox.Show(e.StackTrace);
                    MessageBox.Show(invokeAttr.ToString());
                }
                throw new COMException(Ошибка);
            }

            // Так как параметры могут изменяться (OUT) и передаются по ссылке
            // нужно обратно обернуть параметры
            УстановитьИзмененияВМассиве(argsOrig, args);

            return(ОбернутьОбъект(obj));
        }
Beispiel #18
0
 static object internalGetFieldOrProperty(Type t, string name, BindingFlags b, object obj_or_null)
 {
     var field = t.GetField(name, b);
     if (field == null) {
         var property = t.GetProperty (name, b);
         if (property == null)
             throw new ArgumentException (string.Format ("Field or property name '{0}' not found on object of type '{1}', for binding flags '{2}'", name, t.Name, b.ToString()));
         else
             return property.GetValue (obj_or_null, null);
     }
     else
         return field.GetValue (obj_or_null);
 }
Beispiel #19
0
        private static MethodInfo GetNonPublicMethod(Type type, string name, BindingFlags bindingAttr, Type[] paramTypes)
        {
            MethodInfo methodInfo = type.GetMethod(
                name: name,
                bindingAttr: BindingFlags.NonPublic | bindingAttr,
                binder: null,
                types: paramTypes,
                modifiers: null
                );

            if (methodInfo is null)
            {
                string msg = string.Format("Couldn't find {0} method {1} in type {2}.", bindingAttr.ToString(), name, type.AssemblyQualifiedName);
                throw new InvalidOperationException(msg);
            }
            else
            {
                return(methodInfo);
            }
        }
Beispiel #20
0
        static object internalGetFieldOrProperty(Type t, string name, BindingFlags b, object obj_or_null)
        {
            var field = t.GetField(name, b);

            if (field == null)
            {
                var property = t.GetProperty(name, b);
                if (property == null)
                {
                    throw new ArgumentException(string.Format("Field or property name '{0}' not found on object of type '{1}', for binding flags '{2}'", name, t.Name, b.ToString()));
                }
                else
                {
                    return(property.GetValue(obj_or_null, null));
                }
            }
            else
            {
                return(field.GetValue(obj_or_null));
            }
        }
 public override EventInfo[] GetEvents(BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetEvents: {0}", bindingAttr.ToString());
     return new EventInfo[] {};
 }
Beispiel #22
0
    public static FieldInfo GetFieldInfo(this Type objType, string fieldName, BindingFlags flags, bool isFirstTypeChecked = true)
    {
        FieldInfo fieldInfo = objType.GetField(fieldName, flags);

        if (fieldInfo == null && objType.BaseType != null)
        {
            fieldInfo = objType.BaseType.GetFieldInfo(fieldName, flags, false);
        }

        if (fieldInfo == null && isFirstTypeChecked)
        {
            throw new MissingFieldException(String.Format("Field {0}.{1} could not be found with the following BindingFlags: {2}", objType.ReflectedType.FullName, fieldName, flags.ToString()));
        }
        return(fieldInfo);
    }
 public override MethodInfo[] GetMethods(BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetMethods: {0}", bindingAttr.ToString());
     return new MethodInfo[] {};
 }
 public override PropertyInfo[] GetProperties(BindingFlags bindingAttr)
 {
     Console.WriteLine("Call to GetProperties: {0}", bindingAttr.ToString());
     return new PropertyInfo[] { };
 }
 internal static string ToSTR(this BindingFlags flags) => flags == ALL ? "ALL" : flags.ToString();