2

在下面的示例中,是否可以动态设置 Classname 类型参数?

UpdateAndSave<Classname>>().Execute(sql)
4

2 回答 2

7

如果您的类型来自一个对象,那么您可以使用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>(...)),然后调用. 另外,它会缓存该类型的策略,因此下次它会很快(每个唯一类型只做一次重要的工作)。

于 2013-11-07T11:46:40.430 回答
4

好吧,您可以通过反射来调用它,是MethodInfo.MakeGenericMethod的 - 用于提供类型参数:

var method = typeof(Whatever).GetMethod("UpdateAndSave");
var genericMethod = method.MakeGenericMethod(typeArgument);
genericMethod.Invoke(target, new object[] { sql });
于 2013-11-07T11:24:06.457 回答