Почему он возвращает ноль, когда я пытаюсь вызвать универсальные методы? - PullRequest
1 голос
/ 29 декабря 2011

Я пытался выполнить универсальные методы и использовать рекурсию.Проблема в том, что метод GetMethod возвращает null.Как я могу улучшить код?

public static T GetElementObject<T>(this XElement element)
{
    T returnObject = Activator.CreateInstance<T>();
    PropertyInfo[] propertyInfos = returnObject.GetType().GetProperties();
    Type propertyType;

    foreach (PropertyInfo propertyInfo in propertyInfos)
    {
        propertyType = propertyInfo.PropertyType;

        if (propertyType.IsAssignableFrom(typeof(BaseProxyEntity)))
        {
            MethodInfo getElementObject = typeof(Utility).GetMethod("GetElementObject<>", System.Reflection.BindingFlags.Static | BindingFlags.Public).MakeGenericMethod(propertyType);
            propertyInfo.SetValue(returnObject, getElementObject.Invoke(null, new object[] { element.Descendants(propertyInfo.Name) }), null);
        }
        else if (propertyType.IsValueType == true)
        {
            MethodInfo CastValue = typeof(Utility).GetMethod("CastValue<>", System.Reflection.BindingFlags.Static | BindingFlags.Public).MakeGenericMethod(propertyType);
            propertyInfo.SetValue(returnObject, CastValue.Invoke(null, new object[] { element.Attribute(propertyInfo.Name).Value }), null);
        }
        //Other else conditions ...
    }

    return returnObject;
}

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Хотя Евгений Рик прав, имена искажены для универсальных типов, но они не искажены для универсальных методов. Попробуйте без угловых скобок: GetMethod("GetElementObject", ... и GetMethod("CastValue",

1 голос
/ 29 декабря 2011
GetMethod("GetElementObject<>", ...)

Будет всегда возвращать ноль, так как такого метода нет. Имена искажены для универсальных типов, начните с перечисления всех методов и продолжайте оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...