c#方法的参数重载

本文关键字:重载 参数 方法 | 更新日期: 2023-09-27 18:17:15

请帮忙!

我做错了什么?

    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);,我得到编译时错误。

如果我确实需要这些方法签名,如何克服这个问题?

EDIT:对于Compile-tme错误- ReSharper抱怨:

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

空白f1 (Syste.Drawing。Color, params[] float)

空白f1 (Syste.Drawing。Color, params[] int)

c#方法的参数重载

我认为问题是你正在传递null的颜色,这可能会扰乱功能,要么改变为Color?(因为它是一个结构体)或传递一个有效的颜色值

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

您不能传递null来代替struct参数,即您的示例中的Color。问题不在于参数。一些有效的调用会像;

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"

如果Color为System.Drawing.Color,则参数color不能为空。如果你想让color为空,使用Color? type

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

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

首先,您不能为Color参数使用null。要使用这两种代码中的一种,对int使用以下代码:

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

或this for floats:

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

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