Почему я получаю сообщение об ошибке при попытке установить значение по умолчанию для публичного метода в цвете? - PullRequest
1 голос
/ 13 сентября 2009

У меня есть что-то вроде этого:

[Description("Sets the color."),
Category("Values"),
DefaultValue(Color.White),
Browsable(true)]
public Color MyColor
{
    get
    {
        return myColor;
    }
    set
    {
        myColor = value;
    }
}
private Color myColor = Color.White;

Я получаю сообщение об ошибке в этой строке:

DefaultValue(Color.White),

Если значение логическое, проблем нет, но при попытке установить его в цвет я получаю: Аргументом атрибута должно быть выражение константы, выражение typeof или выражение создания массива типа параметра атрибута

Может кто-нибудь определить проблему?

Ответы [ 3 ]

5 голосов
/ 13 сентября 2009

Color.White не является константным выражением; скорее это поле readonly static property 1 и включает в себя создание.

Редактировать :

Для вашей информации, альтернативный способ установки значения по умолчанию Color может выглядеть следующим образом:

[DefaultValue(typeof(Color), "White"]
public Color MyColor
{ ... }

1. Эд Свангрен указал на это в своем ответе

2 голосов
/ 13 сентября 2009

Поскольку предопределенные объекты цвета в структуре Color не являются константами, они являются статическими свойствами только с аксессором get.

public static Color Transparent { get; }

Эта строка фактически возвращает новый объект Color, используя значения в перечислении KnownColor для его построения:

public static Color Transparent 
{ 
    get { return new Color( KnownColor.Transparent ); } 
}

Итак, как вы можете видеть, в вызове этого метода нет ничего постоянного, поэтому вы получаете сообщение об ошибке.

0 голосов
/ 13 сентября 2009

В описании ошибки все сказано :) Попробуйте поместить туда значение цвета в виде строки (означает «константное выражение»).

PS. в вашем коде по умолчанию установлено значение закрытого члена, поэтому вы можете пропустить этот атрибут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...