下午、晚上......无论你身在何处;)
我正在开发一个将执行一组“ManagedThread<>”的“ThreadManager”。托管线程是“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”传递给我的构造函数的通用参数。
最佳答案
这没有意义。
泛型是编译时类型;您不能拥有直到运行时才知道的编译时类型。
相反,您需要使用反射:
Type gt = typeof(ManagedThread<>).MakeGenericType(ThreadType);
object t = Activator.CreateInstance(gt, this,this.GetConfiguration(ThreadType));
关于c# - 将 'Type' 传递给通用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8718199/