2013-02-25 8 views

答えて

16

DateTimeはC#言語のネイティブタイプではありません.NetTimeライブラリの構造体です。

C#では、ネイティブ言語の型からしかconstを作成できません。また、コンパイル時に計算できる値で初期化できます。 DateTime.Nowはコンパイル時には計算できません。

は(あなたがconstのに使用できる唯一の参照型は文字列で、文字列は特別に処理されているためです。)あなたは のconstとして DateTimeを宣言することができたとしても

は(http://msdn.microsoft.com/en-gb/library/e6w8fe1b%28v=vs.71%29.aspx

+0

'DateTime.Now'は' const'式ではありません。 const値は、リテラルなどの他のconst式からのみ割り当てることができます。 – Dai

+0

ありがとうございました。また、文字列についての情報も含めて更新しました。 –

26

を参照してください。コンパイル時定数を値として使用する必要があります。DateTime.Nowはコンパイル時定数ではありません。

しかしこれは有効です。

static readonly DateTime dt = DateTime.Now(); 

注これはしかし「型の型初期化子が実行されたものは何でも時間」になること。あなたが測定しようとしていることを前提にして、起動時に初期化されていることを確認しない限り、特に有用な値はめったにありません。

+0

constの代わりにreadonlyを使用できることについての良い点があります。 –

+2

'VB.NET'の' Const'もコンパイル時に 'static readonly'に変換されることは注目に値します。 @TimSchmelter:ILでは 'literal'を使って表現できない値のみです。これは擬似定数です:' Const today As DateTime =#2/25/2013# ' –

+0

@TimSchmelter: 'Public Const Bar As Integer = 20'を使用してILで' .field public static literal int32 Bar = int32(0x14) 'となる場合。 –