我有一个方法
void InitAndLoadTables(DbConnection cnctn, Dictionary<string, DbTableLoadParameters> tableNamesAndParameters)
其中字典可以包含任意数量的表。每个表对应一个类。
当我遍历所有表时,我想调用泛型方法
public void Init<T>(string tableName)
表示所有表格。我试图将类的类型包含为DbTableLoadParameters的属性为
Type ObjectType { get; set; }
并在调用Init时使用它。这不起作用。那甚至可以做到吗?如果表的数量是固定的,我可以使InitAndLoadTables像
一样通用InitAndLoadTables<T, K, V>
但事实并非如此。所以只能在其他地方调用Init,如
Init<Orders>("Orders");
谢谢&amp; BR -Matti
答案 0 :(得分:4)
无法将任意数量的类型参数传递给泛型方法,因为泛型方法总是具有固定数量的类型参数。
然而,你似乎甚至不需要那样做。有一种方法可以使用运行时已知的类型调用泛型方法,但这涉及到反射,这听起来就像是真正之后:
class Program
{
static void Main(string[] args)
{
var myobj = new MyClass();
// Call MyClass.Init<Orders>
CallMyClassInit(typeof(Orders), "tableOrders");
// Call Init<string>
CallMyClassInit(typeof(string), "tableString");
}
static void CallMyClassInit(MyClass obj, Type type, string tableName)
{
typeof(MyClass)
.GetMethod("Init")
.MakeGenericMethod(type)
.Invoke(obj, new object[] { tableName });
}
}
class Orders { }
class MyClass
{
public void Init<T>(string tableName)
{
Console.WriteLine("I was called with type " + typeof(T) + " for table " + tableName);
}
}
输出:
I was called with type ConsoleApplication1.Orders for table tableOrders
I was called with type System.String for table tableString