使用泛型参数创建方法
Creating a method with generic param
我正在尝试在静态 class 中创建一个泛型方法,如下所示
我将在 运行 时将 paramData 传递给它。
public static void InsertBulk<T>(string procedure, IDictionary<T,T> paramData)
{
//Body
}
这是有效的,但是一旦我删除 <T>
下面的方法名称,它就会开始显示
类型错误。为什么会这样。
public static void InsertBulk(string procedure, IDictionary<T,T> paramData)
{
}
IDictionary<int,string> myparams= new IDictionary<int,string>();
据我所知,我可以使用 classname.InsertBulk("MyProc",myparams);
调用此方法
那么,为什么它要求方法名称之后。有什么用。
这里有两件事需要理解:
- 你如何声明一个泛型方法
- 你如何调用一个泛型方法
您需要在方法声明中包含 <T>
以使其成为通用方法。没有它,编译器就不知道 T
是什么……它希望它是常规类型的名称。
现在,当您 调用 泛型方法时,您可以像这样指定类型参数:
InsertBulk<int>("MyProc", myParams);
这里只有一个类型参数:int
。 (由于下文所述的原因,这不会编译,但它是指定类型参数的示例。)
... 或者您可以让编译器尝试根据方法的参数 推断 类型参数 - 在这种情况下,它将查看 myParams
并找出类型参数必须是什么才能使调用编译。类型推断的细节非常复杂,但它们的设计使得在合理的情况下,您无需指定类型参数就可以逃脱。
在你的例子中,由于 myParams
是一个 IDictionary<int, string>
,它无论如何都无法编译,因为没有 T
,IDictionary<int, string>
是一个 [=20] =].您可能会使您的方法具有 两个 类型参数:
public static void InsertBulk<TKey, TValue>(
string procedure, IDictionary<TKey, TValue> paramData)
那一点你可以调用 InsertBulk("MyProc", myParams)
并且编译器将推断 int
和 string
.
的类型参数
我正在尝试在静态 class 中创建一个泛型方法,如下所示 我将在 运行 时将 paramData 传递给它。
public static void InsertBulk<T>(string procedure, IDictionary<T,T> paramData)
{
//Body
}
这是有效的,但是一旦我删除 <T>
下面的方法名称,它就会开始显示
类型错误。为什么会这样。
public static void InsertBulk(string procedure, IDictionary<T,T> paramData)
{
}
IDictionary<int,string> myparams= new IDictionary<int,string>();
据我所知,我可以使用 classname.InsertBulk("MyProc",myparams);
调用此方法
那么,为什么它要求方法名称之后。有什么用。
这里有两件事需要理解:
- 你如何声明一个泛型方法
- 你如何调用一个泛型方法
您需要在方法声明中包含 <T>
以使其成为通用方法。没有它,编译器就不知道 T
是什么……它希望它是常规类型的名称。
现在,当您 调用 泛型方法时,您可以像这样指定类型参数:
InsertBulk<int>("MyProc", myParams);
这里只有一个类型参数:int
。 (由于下文所述的原因,这不会编译,但它是指定类型参数的示例。)
... 或者您可以让编译器尝试根据方法的参数 推断 类型参数 - 在这种情况下,它将查看 myParams
并找出类型参数必须是什么才能使调用编译。类型推断的细节非常复杂,但它们的设计使得在合理的情况下,您无需指定类型参数就可以逃脱。
在你的例子中,由于 myParams
是一个 IDictionary<int, string>
,它无论如何都无法编译,因为没有 T
,IDictionary<int, string>
是一个 [=20] =].您可能会使您的方法具有 两个 类型参数:
public static void InsertBulk<TKey, TValue>(
string procedure, IDictionary<TKey, TValue> paramData)
那一点你可以调用 InsertBulk("MyProc", myParams)
并且编译器将推断 int
和 string
.