只有字符串时传递泛型类型'class'

时间:2016-04-15 12:47:48

标签: c# reflection

在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);

1 个答案:

答案 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!");
    }
}