用params重载的C#方法

时间:2011-12-07 08:54:46

标签: c# params overloading

请帮助!

我做错了什么?

    static void f1(Color color, params float[] f)
    {
        System.Console.WriteLine("Here is f1 for float");
    }

    static void f1(Color color, params int[] f)
    {
        System.Console.WriteLine("Here is f1 for int");
    }

    static void Main()
    {
        f1(null,0);
    }

我无法调用f1(null,0);我收到编译时错误。

假设我确实需要这些方法签名,如何克服这些工作人员?

编辑:至于编译错误 - ReSharper抱怨:

无法解析方法f1(null,int),候选者是:

void f1(Syste.Drawing.Color,params [] float)

void f1(Syste.Drawing.Color,params [] int)

5 个答案:

答案 0 :(得分:4)

我认为问题是你为Color传递null可能会扰乱函数,要么将其更改为Color?(因为它是结构)或传递有效的Color值

static void f1(Color? color, params float[] f)

static void f1(Color? color, params int[] f)

答案 1 :(得分:3)

您不能传递null来代替struct参数,即示例中的Color。问题不在于params参数。 一些有效的电话会是这样的;

f1(Color.Black, 0); // prints "Here is f1 for int"
f1(Color.Black, 0f); //prints "Here is f1 for float"
f1(Color.Black, 0, 5, 6, 7); // prints "Here is f1 for int"
f1(Color.Black, 0, 5.4f, 6, 7); //prints "Here is f1 for float"

答案 2 :(得分:2)

如果Color为System.Drawing.Color,则参数color不能为空。如果您希望color可以为空,请使用Color?类型

f1(Color.Black, 0) // works
f1(null, 0) // Doesn't work

答案 3 :(得分:0)

您需要在Color参数中传递System.Drawing.Color Object not null。

答案 4 :(得分:0)

首先,你不能使用null作为Color参数。 要使用其中一个代码,请使用以下内容:

f1(SystemColors.ActiveBorder, new int[]{0});

或浮动的这个:

f1(SystemColors.ActiveBorder, new float[]{0});

你使用它的方式总是调用int版本。