C# 通过';类型';到泛型构造函数

C# 通过';类型';到泛型构造函数,c#,generics,reflection,C#,Generics,Reflection,下午,晚上。。。不管你在哪里;) 我正在开发一个“线程管理器”,它将执行一组“ManagedThread”。托管线程是“ManagableThread”的通用包装器,它包含大多数基本方法 要启动的“ManagableThread”列表基于配置文件中的内容,并在ThreadManager.start方法中生成。此列表将填充所有要。。。管理。这是我试图用来完成这项任务的代码,我相信任何有能力的C#开发者都会很快意识到——我不会像这样摇摆它 public void Start() { fore

下午,晚上。。。不管你在哪里;)

我正在开发一个“线程管理器”,它将执行一组“ManagedThread”。托管线程是“ManagableThread”的通用包装器,它包含大多数基本方法

要启动的“ManagableThread”列表基于配置文件中的内容,并在ThreadManager.start方法中生成。此列表将填充所有要。。。管理。这是我试图用来完成这项任务的代码,我相信任何有能力的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;
        }
    }
}
public void Start(){
foreach(this.Config.Arguments.Keys中的字符串ThreadName){
类型ThreadType=null;
if((ThreadType=Type.GetType(ThreadName))==null){
继续;
}
否则{
ManagedThread T=新的ManagedThread(
这
此.GetConfiguration(ThreadType)
);
this.ManagedThreads.Add(T);
继续;
}
}
}
我试了几次也没用。如果有人有任何建议,我将不胜感激。我不是泛型专家,所以这有点超出我的专业领域,所以请不要让我哭泣,但如果我是个傻瓜,请随时抓住我

提前感谢任何能伸出援手的人


编辑:我想我应该澄清我的问题,而不是让你们都弄明白。。。此代码将不会编译,因为我无法将“ThreadType”传递给构造函数的泛型参数。

这没有意义。
泛型是编译时类型;您不能拥有直到运行时才知道的编译时类型

相反,您需要使用反射:

Type gt = typeof(ManagedThread<>).MakeGenericType(ThreadType);
object t = Activator.CreateInstance(gt, this,this.GetConfiguration(ThreadType));
Type gt=typeof(ManagedThread);
对象t=Activator.CreateInstance(gt,this,this.GetConfiguration(ThreadType));

这是不可能的。泛型参数必须在编译时已知。直到运行时才知道您的类型。

这没有多大帮助,但我想它给了我一个前进的方向。谢谢。编辑后会更有帮助-谢谢。实际上我去了,并抓取了一个几乎包含同一个体的方法。.NET中的泛型不是编译时,不像C++。@ LaDeLogic:我并不意味着它们只存在于编译时;我的意思是,它们形成了编译时已知的类型,类型的对象和for都是独立的东西。正如你所发现的,它们是不可交换的。正如SLaks所指出的,在运行时使用反射从泛型创建新事物(对象、类型、方法)。看见