C# 将类型转换为泛型类定义

C# 将类型转换为泛型类定义,c#,.net,C#,.net,我想将System.Type转换为泛型类型定义,以便使用它调用泛型方法。基本上与的类型相反 示例(我使用了“classof”,在这里我需要真正的解决方案,以便您看到我在哪里遇到了问题,因为classof不是真正的.NET方法): 公共类BaseAppContext{ 私有类型设置类型; 公共类型设置类型 { 获取{返回this.setingstype;} 设置{this.setingstype=value;} } 公共函数(){ MyStaticClass.GetData(); } }

我想将
System.Type
转换为泛型类型定义,以便使用它调用泛型方法。基本上与的类型相反

示例(我使用了“classof”,在这里我需要真正的解决方案,以便您看到我在哪里遇到了问题,因为classof不是真正的.NET方法):

公共类BaseAppContext{
私有类型设置类型;
公共类型设置类型
{
获取{返回this.setingstype;}
设置{this.setingstype=value;}
}    
公共函数(){
MyStaticClass.GetData();
}
}

只是更多的信息,为什么我用这种奇怪的方式来处理这个问题。BaseAppContext是一个被许多其他类引用的类。如果我想让它成为通用的,那就意味着代码的许多其他部分都会改变,这是我不想要的。我正在编写一个框架,因此我希望框架只输入一次类型,开发人员可以使用提供的函数,而不必每次尝试调用方法时都处理类型。

这根本不可能。
泛型形成编译时类型;不能从仅在运行时已知的类型创建编译时类型


相反,您需要使用反射,或者使用不同的设计(例如,非通用方法)。

要实现这一点,您需要使用反射:

public void MyFunction() {
  var method = typeof(MyStaticClass).GetMethod("GetData").MakeGenericMethod(SettingsType);
  method.Invoke(null, null);
}

但是,我不建议这样做,而是建议重新设计您的解决方案。使用反射意味着您错过了该语言提供的所有可爱的编译时安全性。这通常会导致更脆弱、更不易维护的代码。

这是不可能的,因为
SettingsType
是在运行时设置的,而
之间的代码是编译的

您可以按如下方式创建类型的实例:

var type = Type.GetType(SettingsType);
var inst = Activator.CreateInstance(type);
并将
inst
强制转换为接口或基类


因为您使用的是静态类,所以rich的答案更好。

这没有意义。使用
列表
,您能做什么?约束条件呢?Laks,似乎相关,我应该如何继续?
var type = Type.GetType(SettingsType);
var inst = Activator.CreateInstance(type);