下午,晚上......无论你在哪里;)
我正在开发一个'ThreadManager',它将执行一组'ManagedThread<>'。托管线程是'ManagableThread'的通用包装器,它包含大多数基本方法。
要启动的ManagableThread列表基于配置文件的内容,并在ThreadManager.Start方法中生成。此列表旨在填充所有要管理的ManagedThread。这是我试图用来完成这项任务的代码,因为我确信任何有能力的C#开发人员都会很快意识到 - 我不会像这样摆动它。
public void Start() {
foreach (String ThreadName in this.Config.Arguments.Keys) {
Type ThreadType = null;
if ((ThreadType = Type.GetType(ThreadName)) == null) {
continue;
}
else {
ManagedThread<ThreadType> T = new ManagedThread<ThreadType>(
this,
this.GetConfiguration(ThreadType)
);
this.ManagedThreads.Add(T);
continue;
}
}
}
我对此采取了一些措施无济于事。如果有人有任何建议我会感激他们。我不是泛型专家,所以这略微超出了我的专业领域,所以请不要让我哭,但如果我是个傻瓜,请随时抓住我。
提前感谢能够提供帮助的任何人。
编辑:我想我应该澄清我的问题,而不是让大家弄明白......这段代码不能编译,因为我无法将'ThreadType'传递给我的构造函数的泛型参数。
答案 0 :(得分:7)
这没有意义。
泛型是编译时类型;你不能拥有一个在运行时才知道的编译时类型。
相反,您需要使用Reflection:
Type gt = typeof(ManagedThread<>).MakeGenericType(ThreadType);
object t = Activator.CreateInstance(gt, this,this.GetConfiguration(ThreadType));
答案 1 :(得分:0)
这是不可能的。通用参数必须在编译时知道。直到运行时才知道您的类型。