1. ホーム
  2. c#

[解決済み] オプションのパラメーターのデフォルト値としてString.Emptyを使用できません。

2023-02-17 23:46:05

質問

読書中 効果的なC#の使い方 を読んでいます。で 項目 14 - 重複する初期化ロジックを最小化する で、彼はコンストラクタで新しいオプションのパラメータ機能を使用する次の例を示しています。

public MyClass(int initialCount = 0, string name = "")

を使用していることに注意してください。 "" の代わりに string.Empty .

とコメントしています。

上の例で] 2 番目のコンストラクタでは、デフォルト値として 名前 パラメータに、より慣習的な string.Empty . それは string.Empty はコンパイル時の定数ではありません。これは文字列クラスで定義された静的プロパティです。コンパイル時定数ではないので、パラメータのデフォルト値として使用することはできません。

が使えないのであれば string.Empty を使用できないのであれば、その目的は達成されないのではないでしょうか?私は、システムに依存しない空の文字列を参照する手段があることを確認するために、それを使用するのだと思っていました。私の理解は間違っているのでしょうか?ありがとうございます。

UPDATE

ちょっとフォローのコメントです。MSDNによると。

各オプションパラメータは、その定義の一部としてデフォルト値を持ちます。そのパラメータに対して引数が送られない場合、デフォルト値が使用されます。 デフォルト値は定数でなければなりません。

では System.Environment.NewLine も使えないし、新しくインスタンス化されたオブジェクトをデフォルト値として使用することもできません。私はまだ VS2010 を使用していないので、これは残念です。

どのように解決するのですか?

C# 2.0コンパイラの時点では、この問題を解決するために String.Empty への参照をインライン化することができるので、多くの場合、それは悲観的なものです。 "" をインライン化することはできますが String.Empty .

C# 1.1では、すべて空の文字列を含む独立したオブジェクトをたくさん作るのを避けるのに便利でしたが、そのような時代は過ぎ去りました。 "" はうまく機能します。