2012-01-29 9 views
8

nullの型の値型を許可するコードでは、メンテナンスが悪夢になりますか?私はint?Nullable<int>と同等であることを認識していますが、私の質問はそれの使い勝手をより重視しています。値の種類を見て、当然を許可しないと見なします。しかし、Nullable<T>に疑問符を省略して表示すると、それは明らかなことですが、常に目立つわけではありません。Nullable <T>のバリュープラクティスには値の種類がありますか?

はちょうどあなたのでそれは、あなたがなければならないという意味ではありません行うことができ、これらの特徴のひとつですか?

どのような設定が必要ですか?値タイプのデフォルト値(つまり、int SomeConfigOption = -1;)またはNullable<T>(つまりint? SomeConfigOption;)を使用していますか?

+0

'Nullable 'は値型とともに使用するためのものです。あなたは 'Nullable 'が一般的に有害であると考えるべきかどうか尋ねているようです。 – Cameron

+0

@Cameron私の言葉遣いはちょっとばかだと思います。必ずしも直接的に有害ではなく、単に複雑さを加えるだけです。 –

+1

あなたが何をしても、構造体を書き込まないで、 'Nullable 'を使ってください。先日、私は生産コードでそれを見つけました。ちょうどそれをクラスにしてください! – TrueWill

答えて

11

どのように優先されるべきですか?値タイプのデフォルト値(つまり、 int SomeConfigOption = -1;)またはNullable(int? SomeConfigOption;)を使用していますか?あなたは不在値のを考慮する必要がありケースを持っているときには、この場合には

は明らかにあなたは Nullable<T>たい。 -1のようなマジックナンバーはメンテナンスの悪いナイトメアです。

これはC#言語の中核的機能であり、他の機能と同様に悪用される可能性がありますが、これらの利点は言語に習熟していない人がソースコードを読んでいる可能性のある問題スピードアップする。

+2

私はその答えが好きです。しかし、フレームワーク自体がこれを利用しないのはなぜですか?例えば、コントロール上の 'SelectedIndex'は、選択された項目がないときに' -1'の値を持つことがよくあります。なぜMSFTは 'Nullable 'を利用したいのですか?それは私のエンジンにレンチを投げます。 –

+2

.NET 2.0まではNullableを使用できなかったので –

+0

@HansPassantしたがって、伝統のために保存しますか? –

0

私は、デフォルト値(開発者がnullを意味する)を持つ値型に対してnullable型を好む。私はデフォルト値が何も意味しないところでコード内に多くの問題を発見しました。

2

Nullable型のコードは、自己完結型であると考えられます。

例:

int? someConfigOption; 
if (someConfigOption.HasValue) 
{ 
    // Use someConfigOption.Value property. 
} 
else 
{ 
    // Value is absent. 
} 

もう一つの便利なアプローチ:もちろん

int value = someConfigOption.GetValueOrDefault(); 

、それらのパラメータは、もあるべきなのNullable値を取る方法はを記録しました。

関連する問題