在下面的示例中,是否可以动态设置 Classname 类型参数?
UpdateAndSave<Classname>>().Execute(sql)
如果您的类型来自一个对象,那么您可以使用dynamic
- 劫持它来为您执行(并缓存,通过元编程等)类型解析。例如 - 如果您目前有:
object obj = ...
Type type = obj.GetType();
// now want to call UpdateAndSave<type>(...)
那么你可以这样做:
public void Voodoo<T>(T obj, string sql) {
UpdateAndSave<T>().Execute(sql);
}
并且只是:
object obj = ...
Voodoo((dynamic)obj, sql);
运行时将检测 的类型obj
,确定要使用的最佳重载(将是Voodoo<TheActualType>(...)
),然后调用. 另外,它会缓存该类型的策略,因此下次它会很快(每个唯一类型只做一次重要的工作)。
好吧,您可以通过反射来调用它,是MethodInfo.MakeGenericMethod
的 - 用于提供类型参数:
var method = typeof(Whatever).GetMethod("UpdateAndSave");
var genericMethod = method.MakeGenericMethod(typeArgument);
genericMethod.Invoke(target, new object[] { sql });