はい、しかしのみ:
enum Priority {
None = 0,
Low,
Medium,
High,
Critical
}
次に、このコードは、理にかなって、読み取り可能である:
if(message.Priority >= Priority.Medium) {
// Notify user
}
列挙型は、このようなスケールを表現していない場合、彼らはかなり混乱することができますよう、その後<
または>
を使用しないでください。代わりにビットフラグを使用してください。
フラグ列挙型は、値を組み合わせることができるようにバイナリ値を使用する:
enum UserAudiences {
// Basic values: dec // binary
None = 0, // 0000
Client = 1, // 0001
Employee = 2, // 0010
Contractor = 4, // 0100
Key = 8, // 1000
// Combined: dec // binary
KeyClient = 9, // 1001 : Key + Client
BoardMember = 10, // 1010 : Key + Employee
CounterParty = 5, // 0101 : Client + Contractor
BusinessPartner = 13 // 1101 : Key + Client + Contractor
}
そして、我々は二進数を見複合列挙値に対して、適切なビットが設定されているかどうかをチェックします。私たちはUserAudiences.Employee
をチェックしたい場合は、インスタンスのために私達はちょうどそれが設定されているならば、我々はそれを含んで列挙型の値のいずれかを持って、2を表し、ビットを探すことができます。
if((message.Audience & UserAudiences.Employee) != 0) {
// Post on intranet
} else {
// Send externally
}
そのビットを設定する方法はありませんKey
,Client
またはContractor
列挙型の任意の組み合わせによって、Employee
が「ソース」列挙型の1つである場合にのみ設定できます。
ほとんどの言語は、このためにヘルパーを持っている(またはあなた自身を書くことができます):
if(message.Audience.HasFlag(UserAudiences.Employee)) { ...
数学がどのベースで仕事ができる - あなたは小数で1、10、100、などを使用することができます。しかし、はるかに早く多くの数を必要とします。
最後に、通常の列挙型には単一の名前を使用し、フラグ付きの列挙型には複数の名前を使用して、等価性またはビット単位のチェックを使用するかどうかをプログラマに示唆します。
あなたはビットマスクの使用を検討しましたか? –
私はこのコンセプトについて聞いたことがない、私はあなたにそれを見ていただきありがとうございます! – cpatmulloy
Tag6、Tag7、Tag8、Tag9、またはTag10にあるタグの意義は何ですか?これらが優先レベルのようなものなら、あなたの現在のコードのロジックに7〜8のタグを追加する人が含まれているはずです。それらが異種で比類のない意味を持つ場合、追加のタグは現在のコードに含まれてはいけません(またはタグが追加されたときに考慮する必要があります)。あなたのif条件が何を意味するかによって異なります。また、列挙型のセマンティクスが明確に示されている場合、将来の開発者は新しいタグを追加するときにうまく行こうとします。 – Atreys