Перегрузка метода C # с параметрами - PullRequest
2 голосов
/ 07 декабря 2011

Пожалуйста, помогите!

Что я делаю не так?

    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); Я получаю ошибку во время компиляции.

Как можно преодолеть этот персонал, если мне действительно нужны эти сигнатуры методов?

РЕДАКТИРОВАТЬ: Что касается ошибки Compile-tme - ReSharper жалуется:

Невозможно разрешить метод f1 (null, int), кандидаты:

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

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

Ответы [ 5 ]

4 голосов
/ 07 декабря 2011

Я думаю, что проблема в том, что вы передаете NULL для Color, который может нарушить функцию, либо измените его на Color? (так как это структура) или передайте действительное значение Color

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

static void f1(Color? color, params int[] f)
3 голосов
/ 07 декабря 2011

Вы не можете передать значение null вместо параметра структуры, то есть 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"
2 голосов
/ 07 декабря 2011

Если цвет равен System.Drawing.Color, то параметр color не может быть нулевым. Если вы хотите, чтобы color обнулялся, используйте Color? type

f1(Color.Black, 0) // works
f1(null, 0) // Doesn't work
0 голосов
/ 07 декабря 2011

Прежде всего, вы не можете использовать null для параметра Color.Чтобы использовать один из обоих кодов, используйте это для целых чисел:

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

или это для чисел с плавающей запятой:

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

способ, которым вы используете его, всегда будет вызывать версию int.

0 голосов
/ 07 декабря 2011

Вам необходимо передать объект System.Drawing.Color, не равный NULL, в параметре Color.

...