C#:通用参数与对象类型参数

Ran*_*hid 2 .net c#

我有两种重载方法,一种是期望对象类型参数,另一种是通用参数列表。我试图了解何时调用哪个函数。我正在传递字符串对象,它正在调用通用params方法。

class Program
{
    static void Main(string[] args)
    {
        string s = "string";
        Invoke(s);
        Console.ReadLine();
    }

    static void Invoke(object s)
    {
        Console.WriteLine("Object param invoked");
    }

    static void Invoke<T>(params T[] values)
    {
        Console.WriteLine("Params method invoked");
    }
}
Run Code Online (Sandbox Code Playgroud)

它的输出为:“ Params方法已调用”。

但我不确定为什么总是调用此方法。我也尝试传递int参数,但再次调用了params方法。如果有人可以帮我解释一下。谢谢。

mad*_*ion 5

总之,类型T比更具体的Object,因为Invoke<string>是一个有效的调用。

  • 为了补充这个答案,编译器可以推断出type参数。这就是为什么OP无需编写Invoke &lt;string&gt;(s);`的原因。请参阅[泛型文档](https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/generics/generic-methods)。 (2认同)