按类型创建列表<t>

时间:2016-09-21 11:45:36

标签: c#

通过转换通用列表我遇到了问题。我得到通用列表的值,并希望将其用作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
}

2 个答案:

答案 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)
{
}

这就是我现在可以帮助你的所有内容,因为我不知道你想要实现的目标。