为什么它返回空当我试图调用泛型方法
本文关键字:调用 泛型方法 返回 为什么 | 更新日期: 2023-09-27 18:18:57
我一直在尝试执行泛型方法并使用递归。问题是方法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;
}
虽然Eugen Rieck对泛型类型的名称进行了修改是正确的,但对于泛型方法却没有。试试不加尖括号:GetMethod("GetElementObject", ...
和GetMethod("CastValue",
GetMethod("GetElementObject<>", ...)
将总是返回null,因为没有这样的方法。对于泛型类型,名称是混乱的,从列出所有方法开始,然后从那里开始。