泛型参数是编译类型的构造。在您的情况下,您指定一个字符串(runtine实体)作为类型名称,因此需要在运行时通过反射创建一个封闭的泛型方法实例。
我有什么:
session.Query<Symptom>().First();
我想做的事:
var className="Symptom"
session.Query<className>().First()
有可能以某种方式做到这一点吗?如果是的话,因为我尝试过Type.GetType
等,但没有成功。第二个问题是,我必须通过web请求发送"类型",该查询语法中的"类型"我看起来很好吗?或者,我错过了一些点,我可以以某种方式将类型从前端发送到服务,并从数据库中获得我想要的数据。我使用该查询从Nhibernate获取数据,并且我不想硬编码请求数据附带的所有可能的类型。
编辑:
当我尝试GetType时,我得到:
cannot apply operator '<' to operands of type 'method group' and 'system.type'
下一个代码演示了这一点:
假设我有:
public void Query<T>()
{
Console.WriteLine("Called Query with type: {0}", typeof(T).Name);
}
现在,为了用某种类型调用它,我需要创建一个具有该类型的方法实例:
//type you need to create generic version with
var type = GetType().Assembly //assumes it is located in current assembly
.GetTypes()
.Single(t => t.Name == "MyType");
//creating a closed generic method
var method = GetType().GetMethod("Query")
.GetGenericMethodDefinition()
.MakeGenericMethod(type);
//calling it on this object
method.Invoke(this, null); //will print "Called Query with type: MyType"
这是ideone的完整代码。