通过转换通用列表我遇到了问题。我得到通用列表的值,并希望将其用作SomeMehtod
的参数。
List<MyClass> GenericList;
var propList= this.GetType().GetProperty("GenericList").GetValue(this);
SomeMethode(propList) <-- Does not work
private void SomeMethode(List<T> genericList)
{
}
任何人都可以给我一个提示吗?我试过了,但它不起作用:
List<typeof(MyClass)> newPropList = propList;
我的问题是MyClass
存储在类型变量中:
var typesWithMyAttribute =
from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes()
let attributes = t.GetCustomAttributes(typeof(XMLDataAttribute), true)
where attributes != null && attributes.Length > 0
select new { Type = t, Attributes = attributes.Cast<XMLDataAttribute>() };
foreach (var a in typesWithMyAttribute)
{
var propList = this.GetType().GetProperty(a.Type.Name + "List").GetValue(this);
SomeMethode<a.Type>(propList); <-- Won't work
}
答案 0 :(得分:2)
您需要使用反射来获取构造的方法MethodInfo
的{{1}}。
SomeMethod
对于GetMethod
,如果MethodInfo genericMethod = this.GetType().GetMethod("SomeMethode", BindingFlags.NonPublic);
foreach (var a in typesWithMyAttribute)
{
MethodInfo constructedMethod = genericMethod.MakeGenericMethod(a.Type);
var propList = this.GetType().GetProperty(a.Type.Name + "List").GetValue(this);
constructedMethod.Invoke(this, new[]{propList});
}
为BindingFlags
和/或SomeMethode
,则可能需要指定更多static
。
MakeGenericMethod
创建private
appyling通用MethodInfo
的类型参数。
然后你Invoke
该方法将MethodInfo
作为参数传递。
请注意,您必须将propList
声明为通用:
SomeMethode
答案 1 :(得分:0)
您的方法也必须是通用的。
private void SomeMethode<T>(List<T> genericList)
{
}
这就是我现在可以帮助你的所有内容,因为我不知道你想要实现的目标。