为什么我的代码在使用params时会调用不同的方法重载?

时间:2014-08-19 14:26:02

标签: c# overloading params

为什么只调用编译器的第二个函数而不是第一个函数?我不知道为什么它采取了第二个功能。

WriteLog("string", "string2" , "string3", "string4");

public static void WriteLog(string text, params string[] pAktionInfos)
{
    WriteLog(text, pAktionInfos);
}

public static void WriteLog(string text, string text2, params string[] pAktionInfos)
{
    if (string.IsNullOrEmpty(text2))
    {
        //Awesome Code
    }
    //Another Awesome Code
}

2 个答案:

答案 0 :(得分:4)

只能调用一个函数,编译器会调用最接近原始签名且最具体的函数。

无论如何,您应该收到关于这两个功能的警告。如果不这样做,请调高警告级别。

答案 1 :(得分:1)

因为在编译器中,识别顺序从显式参数变为使用params定义的参数。签名越具体,就越快匹配。