在C#中我有一个方法
public string GetString<T>() where T : class
在调用函数中,我只有要传递给GetString()<T>
的类的名称。例如。 “我的课”。如何将“MyClass”转换为class
?
我尝试使用Type
s但我找不到转换。
编辑: 真实的例子来自数据库访问类。 客户端要求提供特定硬件组件的信息。该组件由字符串指定。基于此字符串,我想访问具有已知名称模式的表。不硬编码表名允许我们在数据库中添加/删除表而无需更改C#代码。
返回所需信息的函数已经存在,需要class
作为泛型类型。
E.g。
string tblName = "HW_" + hwComponentFromClient;
string retValue = GetString<GetClassByString(tblName)>();
我需要类似方法的东西:
class GetClassByString(string);
答案 0 :(得分:3)
您可以获取类名,但是您需要从正确的程序集中获取它并传递类的全名(程序集名称+类名,在我的情况下为"TestAlexander.Test"
)。
class Program
{
static void Main(string[] args)
{
Type classType = Assembly.GetExecutingAssembly().GetType("TestAlexander.Test");
Test test = new Test();
typeof(Test).GetMethod("TestMethod").MakeGenericMethod(classType).Invoke(test, null);
Console.Read();
}
}
public class Test
{
public void TestMethod<T>() where T: class
{
Console.WriteLine("Great success!");
}
}