使用泛型参数创建方法

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>,它无论如何都无法编译,因为没有 TIDictionary<int, string> 是一个 [=20] =].您可能会使您的方法具有 两个 类型参数:

public static void InsertBulk<TKey, TValue>(
    string procedure, IDictionary<TKey, TValue> paramData)

那一点你可以调用 InsertBulk("MyProc", myParams) 并且编译器将推断 intstring.

的类型参数