2009-04-02 3 views
1

にIDを表すために列挙型を使用して、私はこれが機能することを実現:は私が内部的にいくつかのIDを表すために、プレーンなint型を使用していたが、私は周りに遊んでいた間、私は、ヌルIDを表すために定数を必要なC#の

public enum ID : int { Null = -1 } 

例えば:

ID myID = ID.Null; 

これは悪い考えですか?
プレーンなintを使用するのは悪いですか?
問題がある場合、IDを表す最も良い方法は何ですか?

ありがとうございました。

答えて

7

なぜNullable intを使用しないのですか? Nullable<int>またはint?

EDIT
または、それが気に入らない場合は、null idを表す定数としてint.MinValueビルドインを使用してください。 いずれにせよ、それらは標準であり、カスタムハックではありません。

+1

+1。 「値がnullの値の型」は、* Nullableのユースケースです。

2

質問で述べているように、定数を使用するだけではどうですか?あなたが "魔法の" IDの範囲を持っていたいなら、私はenumを使うことはどんな方法と同じように良い方法だと思います。

他のポスターが示唆しているように、int.MinValueなどの組み込み定数のいずれかを使用することは、ほぼ確実に最良の選択肢です。

0

1つの値Nullだけが必要ですか?もしそうなら、constを使用します。

スコープにも依存します - このenumをクラス内、複数のクラス間、またはあるアセンブリから別のアセンブリへと使用している場合。列挙型のクロスアセンブリを使用している場合は、奇妙なケース(現在のところ参照を見つけることができず、正確な詳細を覚えることができません)を気にする必要があります。列挙型の名前と値は非同期に見えます私はあなたがここで行ったように、明示的に値を定義することでこれを避けることができると思います。

0

私は依存していると思いますが、私は単純な定数を扱うenunmerations(多くの場合)と一緒に働くのが好きです。このBeacuse列挙型は、定数よりも詳細なものを表します。多くの場合、多くの用途で列挙型を使用できます。

私は実際にあなたのIDを値-1のenum値として設定しているので、 "language null"を表すのではなく "従来のnull"を表していると思います。その理由から、「言語のヌル」を使用する場合は、nullable Nullable<int>またはint?を使用することをお勧めします。

たとえば、ORMなどで作業しているときに、null値の代わりに一種のun-set-valueを定義することは良い慣行なので、前に述べたように列挙を使用すると便利です依存する。私が考える最後に

は、あなたが答えを

0

感謝を表現する必要がヌルのどのようなより良いと思います。私はこれについて私が気に入っているのは、第1に、プレーンなintまたはintを使用するよりも読みやすくするためにコードを作成することです。別個のIDクラスの不要なオーバヘッドなしに、例えば、:対

int? myId = getAnIDFromSomewhere(); 

ID myId = getAnIDFromSomewhere(); 

は、第二に、それは(?も、もちろんありませんint型)1つのパッケージにまとめ種類とヌル定数を結び付けます。一方、それはどういうわけかここで私の質問が間違って感じる。

私にこれをもたらした1つのことは、IDを返す/使用するインターフェイスにNullID定数を含めることができなかったことです(C#は私を許可しないため) NullIDはそのインターフェイスの一部のようです)。

とにかく私は私の狂気の列挙スキームを続けるとthedailywtf.comに掲載されることになるので、私はこのアイデアを断念していることをここではっきりとしていると思います。 :)

もう一度ありがとうございます。

関連する問題

 関連する問題