简体   繁体   中英

Why am I getting an error messaging when trying to set default value of public method a color?

I have something like this:

[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;

I'm getting an error at this line:

DefaultValue(Color.White),

If the value is a boolean there isn't a problem, but when trying to set it to a color I get: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

Can anyone identify the problem?

Color.White isn't a constant expression; it rather is a readonly field static property 1 and involves instantiation.

Edit :

For your information, an alternative way to set a Color 's default value might look like this:

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

1. Ed Swangren pointed this out in his answer

Because the predefined color objects in the Color struct are not constants, they are static properties with only a get accessor.

public static Color Transparent { get; }

That line actually return a new Color object by using the values in the KnownColor enum to construct it:

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

So, as you can see, there is nothing constant about calling that method, which is why you receive an error.

The error description says it all :) Try to put there the color value as string (mean 'constant expression').

PS. in your code there is a default value set to the private member, so you can skip this attribute.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM