gpt4 book ai didi

C# 从字符串中加载一个类型并声明一个列表

转载 作者:行者123 更新时间:2023-11-30 17:51:26 24 4
gpt4 key购买 nike

我有一个方法被设计为在它的声明中接受一个列表,如下所示:

public class MyHandler
{
public T LookUp<T>()
{
//This method compiles and returns a dynamically typed List
...
}
}

我从其他地方这样调用这个方法:

MyHandler mh = new MyHandler();
List<AgeGroup> ageGroups = mh.LookUp<List<AgeGroup>>();

这个过程非常有效,但我正在寻找一种能够从字符串中动态加载 AgeGroup 类型的方法。

我找到了像 this 这样的例子, 但在这种情况下我无法弄清楚如何实现它。例如,我尝试了以下(但无法编译):

Type t = Assembly.Load("MyNamespace").GetType("MyNamespace.AgeGroup");
List<t> ageGroups = mh.LookUp<List<t>>();

我也试过使用 typeof(t),但没有用。有什么想法吗?

最佳答案

你可以像这样在运行时构造一个泛型类型:

Type listType = typeof(List<>);
Type typeArg = Assembly.Load("MyNamespace").GetType("MyNamespace.AgeGroup");
listType = listType.MakeGenericType(typeArg);
IList list = (IList)Activator.CreateInstance(listType);

当然,您不能将其用作 List<AgeGroup>除非你在编译时知道类型参数。您也将无法使用 Lookup<T>就像您在示例中所做的那样,除非您在编译时知道类型。你必须像这样调用它:

MethodInfo lookupMethod = mh.GetType().GetMethod("LookUp");
lookupMethod = lookupMethod.MakeGenericMethod(listType);
lookupMethod.Invoke(mh, null);

关于C# 从字符串中加载一个类型并声明一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19489989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com