5

由于我在我的应用程序的多个位置使用“System.Drawing.Color.Gainsboro”:

if (tb.BackColor.Equals(System.Drawing.Color.Gainsboro)) {

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

const System.Drawing.Color PSEUDO_HIGHLIGHT_COLOR = System.Drawing.Color.Gainsboro;

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

???

4

3 回答 3

19

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

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

static readonly Color PSEUDO_HIGHLIGHT_COLOR = Color.Gainsboro;

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

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

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

于 2012-04-26T19:54:36.750 回答
6

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

根据MSDN

于 2012-04-26T19:51:35.000 回答
6

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

于 2012-04-26T19:53:58.697 回答