为什么不能声明System.Drawing.Color类型的常量?

B. *_*non 3 c# constants colors winforms

因为我在我的应用程序的多个地方使用"System.Drawing.Color.Gainsboro":

if (tb.BackColor.Equals(System.Drawing.Color.Gainsboro)) {
Run Code Online (Sandbox Code Playgroud)

......我想让它成为一个常数.但当我尝试时:

const System.Drawing.Color PSEUDO_HIGHLIGHT_COLOR = System.Drawing.Color.Gainsboro;
Run Code Online (Sandbox Code Playgroud)

...我得到了,"类型'System.Drawing.Color'不能声明为const"

???

Ada*_*son 16

唯一可以的类型const是那些在C#中具有文字表示的类型,因为在编译时使用文字值替换对常量的引用.没有字面方式来表示颜色(您只能通过工厂方法获得颜色,或者使用其中一种static预先存在的颜色获得颜色).

但是,您可以使用static readonly变量来实现相同的效果.

static readonly Color PSEUDO_HIGHLIGHT_COLOR = Color.Gainsboro;
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅C#语言规范的10.4节

在恒定声明中指定的类型必须是sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimal,bool,string,枚举类型或引用类型.

对于引用类型,唯一有效的值是字符串文字或null.


Yur*_*ich 6

用户定义的类型(包括类,结构和数组)不能是const

根据MSDN.


zim*_*nen 6

System.Drawing.Color是一个结构,不能声明为常量.请尝试使用static readonly,或使用KnownColor枚举.