c# - 将 'Type' 传递给通用构造函数

标签 c# generics reflection

下午、晚上......无论你身在何处;)

我正在开发一个将执行一组“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/

相关文章:

c# - 在WP8中将ogg文件解码为WAV

c# - 如何判断子线程是否完成

c# - 如何在 WPF 中使用 Segoe MDL2 Assets 字体以编程方式创建文本 block

java - 由于边界原因,maven 拒绝编译泛型类,即使在转换类之后也是如此

Scala 类型推断不适用于泛型案例类和 lambda

Java - 将类扩展为接口(interface)/抽象方法的返回类型

C# Buddy 类/元数据和反射

c# - 将 Gtk# Textbuffer 内容保存到文件

c# - MethodInfo.Invoke 因参数数量可变而引发异常

java - 使用 java 反射访问 google play services 类时出现问题