2012-04-26 10 views
3

私は私のアプリで複数の場所で「System.Drawing.Color.Gainsboro」を使用しているので:System.Drawing.Color型の定数を宣言できないのはなぜですか?

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

...私はそれに一定にしたかったです。私が試したときには:

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

を...私は、

"型 'System.Drawing.Colorは' CONST宣言することはできません" てしまいました?クラス、構造体、およびアレイを含む

+3

これは、「KnownColor」の+1のために「const」になる可能性があるので、これはもう少しタイピングしていますが、これと同じ理由です。(http://stackoverflow.com/a/1833589/525558) – Craig

答えて

16

constにできる唯一の型は、定数への参照がコンパイル時にリテラル値に置き換えられるため、C#でリテラル表現を持つ型だけです。色を表現するためのリテラルな方法はありません(ファクトリメソッドか、まったく同じ色を得るには、既存の色のstaticのいずれかを使用します)。

ただし、同じ効果を得るにはstatic readonly変数を使用できます。詳細について

static readonly Color PSEUDO_HIGHLIGHT_COLOR = Color.Gainsboro; 

、一定の宣言で指定された型はsbytebyteshortushortintuintlongulong、でなければならないC#言語仕様

のセクション10.4を参照してくださいchar,float,double,decimal,bool,、列挙型または参照型。

参照型の場合、有効な値は文字列リテラルまたはnullです。

+0

そのリストの項目を特別なものにするのは不思議です。 String以外の他の不変型は、constとして完全に使用できます。 – Nyerguds

6

ユーザー定義タイプは、MSDNによれば CONST

ことができません。

関連する問題