可能な限り文字列の代わりにconst文字列を使用しようとする必要がありますか?

StackOverflow https://stackoverflow.com/questions/19846309

  •  29-07-2022
  •  | 
  •  

質問

これらの3つの例を考えてみましょう。

例a

string message = "Hello world!";
throw new System.Exception(message);

例b

const string message = "Hello world!";
throw new System.Exception(message);

例c

throw new System.Exception("Hello world!");

他のものよりも使用する理由はありますか?具体的には、可能な限りconst文字列を使用しようとしてはいけません(文字列が変更されないと仮定します)。したがって、例Bが最適ですか?例Cではどうなりますか?

上記で放出されたILが同一か異なるかどうか、そして違いがあるかどうかを尋ねていると思います。違いは小さく、おそらく心配することはないことを認識しています。それはこれを学問的な質問にしていると思います。


編集。これがILです

IL_0014: ldstr "This is a string"
IL_0019: stloc.0
IL_001a: ldloc.0
IL_001b: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_0020: throw


IL_0033: nop
IL_0034: ldstr "This is a const string"
IL_0039: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_003e: throw

IL_0051: nop
IL_0052: ldstr "This is an inline string."
IL_0057: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_005c: throw

私と実質的に同じように見えます。

役に立ちましたか?

解決 2

パフォーマンス、メモリ使用、または文字列テーブルの効率に関して違いはありません。

constキーワードの唯一の効果は、文字列が再割り当てされたときにコンパイル時間エラーを生成することです。そのため、Constを追加して、他の開発者に意図を伝えることが役立ちます。

他のヒント

本当に文脈に依存します。このメッセージは変更されますか?オプションAを使用する場合、文字列メッセージの値を変更する機会があります。他の2つはハードコード文字列を印刷しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top