1. ホーム
  2. c#

[解決済み] 文字列のデフォルトの初期化。NULLかEmptyか?[クローズド]

2022-06-28 12:50:32

質問

私は、NULL は値がないことを意味し、"" または String.Empty は有効な値であると考えて、常に自分の文字列を NULL に初期化してきました。 最近、String.Emptyをデフォルト値としたり、値がないことを示すコードの例を多く見かけるようになりました。 c# に新しく追加された null 可能な型では、NULL を使用して「値なし」を表現しないことで、文字列を後退させているように思えます。

デフォルトのイニシャライザーとして何を使用しますか、そしてなぜですか。

編集:回答に基づいて、私はさらに考えを進めます。

  1. エラー処理を回避する 値が null であってはならないのに、なぜ NULL に設定されたのでしょうか? おそらく、あなたのコードベースの残りの部分を通してそれをカバーするよりも、エラーが発生した場所でエラーを識別する方がよいでしょう?

  2. ヌルチェックの回避 コードでNULLチェックをするのに疲れるなら、NULLチェックを抽象化する方がいいのでは? おそらく文字列メソッドをラップ (または拡張!) して、それらを NULL を安全なものにするためにラップする(あるいは拡張する!)とか?もしあなたが常に String.Empty を使い続けていて、たまたまNULLがシステムに入り込んでしまった場合はどうなるのでしょうか? NULL のチェックを追加し始めるのですか?

私は、それが怠惰であるという意見に立ち戻らずにはいられません。の代わりに '' を使用した場合、どんな DBA でも 9 つの方法であなたをひっぱたくことでしょう。 null の代わりに''を使ったら、どんなDBAでも9回バカにするでしょうね。プログラミングにも同じ原則が適用されると思うし、を使う人の頭を叩く人がいてもいいと思う。 String.Empty ではなく NULL を使うことで、値がないことを表します。

関連する質問

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

empty" と NULL を区別したことに +1 します。 私は "empty" が "valid, but blank" を意味し、 "NULL" が "invalid." を意味すべきであるということに同意します。

ですから、私はあなたの質問にこう答えます。

は、例えばユーザーのミドルネームのように、変更してもしなくてもよい有効なデフォルト値が欲しい場合に使用します。

NULL の場合、後続のコードが明示的に値を設定しないとエラーになります。