3

このような列挙型を持つことは良い考えですか?

enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}

問題は、値の名前のセマンティクス、つまりパーセンテージと平方フィートの両方についてです。それは良い考えではないと本当に信じていますが、これをサポートするガイドラインなどを見つけることができませんでした。

編集: これは、エンティティの状態を判断するために使用されます。つまり、オブジェクトの状態を記述するための読み取り専用プロパティとして使用されます。合計スペースがわかっている場合 (つまり、オブジェクト自体がそれを知っている場合)、内部で変換するオプションがあるため、パーセンテージのみ、平方フィート、またはその両方が得られます。議論は、「両方」は良い考えではないということです。

上記はもちろん一例ですが、実際の問題は、一部のデータ プロバイダーが合計 (sq.f.) を送信し、他のプロバイダーがパーセンテージを送信することです。私の目標は UI を統一することです。概算を自由に作成できるので、正確な値は、情報をどの程度正確に表示したいかによって調整されます。

問題は、内容ではなく、値の名前のセマンティクスについてのみです。つまり、(潜在的な) int 列挙型にパーセンテージを入れることが良い考えかどうかです。

4

2 に答える 2

8

答え: いいえ、値を表すために列挙型を使用することはお勧めできません。特に、意味的に異なる 2 つのスケールの値。値に列挙型を使用しないでください。

理由: Percent10 と SqF600 のような 2 つのスケールの enum 値の関係は? コード内で表現できる値のリストをどのように拡張しますか? これらの値に対してどのように比較演算や算術演算を行うのですか?

提案(求められていませんが、それでもここにあります。:-)): あなたがしようとしていることのセマンティックは、2 つのフィールドを含む構造体によってよりよく反映されます。このような構造を使用すると、上記の列挙型で表すことができるものなら何でも表すことができます。たとえば、絶対面積を提供するデータ プロバイダーは、面積と 100% 利用可能な構造体で表されます。パーセンテージを提供するデータ プロバイダーは、設定したパーセンテージと絶対領域を含む構造体で表され、その領域のパーセンテージがデータ プロバイダーが報告する実際の使用可能な領域になります。両方のタイプのプロバイダーからデータの「正規化された」表現を取得し、いくつかの演算子を追加して、インスタンスとの比較と算術計算を有効にすることができます。

于 2008-10-07T20:37:50.730 に答える
5

可能であれば、例を2つの値に分割したいと思います.enumは「Percent」と「SquareFeet」で、2番目の値は数量詞です。これらを構造体に結び付けます。

コンテキストが許せば、"Percent" と "SquareFeet" の 2 つのラッパー タイプを作成してから、いくつかの演算子のオーバーロードを作成すると、"new SquareFeet(500) + new Percent(20); " 列挙型の使用を排除します。

更新:値が業界で認識されている用語であり、ほぼ記号である場合、命名スキームは適切です。たとえば、2 つの値 (「ISO」と 9001 の int を含む列挙型) ではなく、「ISO9001」などの値を含む列挙型を使用する方が安全です。以下のような列挙型を使用することも適切です。

public enum OperatingSystem
{
    Windows95,
    Windows98,
    Windows2000,
    WindowsXP,
    WindowsVista,
    MacOSClassic,
    MacOSXTiger,
    MacOSXLeopard
}

「Percentage10」および「Sqf500」という用語が専門用語ではないか、仕様やデータ ディクショナリなどで明確に定義されていない場合、それらを列挙型の値として使用することは不適切です。

于 2008-10-07T20:33:32.407 に答える