Подтвердить что ты не робот

Использование необязательного параметра типа System.Drawing.Color

Я начинаю использовать дополнительные параметры в .Net 4.0

Проблема, с которой я столкнулась, - это когда я пытаюсь объявить необязательный параметр System.Drawing.Color:

public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
    // ....
}

Я хочу, чтобы Color.Transparent был значением по умолчанию для параметра rgb. Проблема в том, что я продолжаю эту ошибку компиляции:

Значение параметра по умолчанию для 'rgb' должно быть константой времени компиляции

Это действительно убивает мой план, если я могу использовать только примитивные типы для необязательных параметров.

4b9b3361

Ответ 1

В ситуациях, подобных этому, можно использовать типы Nullable value.

public class MyObject 
{
    public Color Rgb { get; private set; }

    public MyObject(int foo, string bar, Color? rgb = null) 
    { 
        this.Rgb = rgb ?? Color.Transparent;
        // .... 
    } 
}

BTW, причина, по которой это требуется, - это то, что значение по умолчанию заполняется в точке вызова во время компиляции, а значения static readonly не заданы до времени выполнения. (По инициализатору типа)

Ответ 2

Я не большой поклонник необязательных параметров для таких случаев вообще. IMO наилучшим вариантом использования для дополнительных параметров является взаимодействие с COM, где дополнительные параметры используются довольно немного. Ситуации, подобные этим, являются одной из причин, почему (я бы догадался), что дополнительные параметры не попадают в язык до 4.0.

Вместо создания необязательного параметра перегрузите функцию следующим образом:

public myObject(int foo, string bar) : this (foo, bar, Color.Transparent) {};

public myObject(int foo, string bar, Color RGB) {
...
}