27

これ:

const int a = 5;

正常にコンパイルされますが、

const var a = 5;

しない...ながら:

var a = 5;

これと同じようにコンパイルします:

int a = 5;

なぜ?

4

4 に答える 4

22

このvarキーワードは、定数にすることのできない長い複雑な型名を記述しないようにすることを目的としています。

次のような宣言を記述できると非常に便利です。

var dict = new Dictionary<string, List<Definition>>();

匿名タイプを使用する場合に必要になります。

定数の場合、これは問題ではありません。
定数リテラルを持つ最長の組み込み型名はdecimal;です。それはあまり長い名前ではありません。

定数として使用できる任意の長さのenum名前を付けることは可能ですが、C#コンパイラチームは明らかにそれを気にしませんでした。
一つには、一定のenum値を作成している場合は、それをに入れた方がよいでしょうenum
また、enum名前は長すぎてはいけません。(複雑なジェネリック型とは異なり、頻繁に行う必要があります)

于 2011-05-26T00:13:54.297 に答える
8

これはコンパイラの制限であり、その制限の理由はここでEricLippertによって示されています。

于 2011-05-26T00:15:34.800 に答える
2

varのない定数:

const int Value1 = 1;
const int Value2 = 2;

varを持つ定数(匿名タイプのプロパティ値は作成後に変更できません):

var constants = new { 
  Value1 = 1, 
  Value2 = 2,
};
//use as constants.Value1
于 2013-09-05T06:27:16.837 に答える
0

定数は組み込みの数値型またはstringである必要があるため、実際にはあまり節約できません。const intはと同じ長さconst varであり、intおそらく最も一般的なタイプの定数です。それから、double実際にはそれほど長くはないものがあります。入力するものがたくさんある場合は、Alt選択機能を使用してください;-)

于 2011-05-26T00:16:48.807 に答える