列挙型のエントリのいくつかのプロパティを定数に格納する必要があります。たとえば、色が冷たいか暖かいかを示します。列挙型の値の生成定数
enum Colors
{
Yellow, // warm
Blue, // cold
Gray, // cold
Red, // warm
// etc.
}
私は、定数のビットマスクを生成するマクロを定義します。以下のような 何か:何のマクロが存在しないため
#define WARM 1
#define COLD 0
#define MAKECOLOR(index, type) ((index << 8) | type)
enum Colors
{
Yellow = MAKECOLOR(0, WARM),
Blue = MAKECOLOR(1, COLD),
Gray = MAKECOLOR(2, COLD),
Red = MAKECOLOR(3, WARM),
// etc.
}
C#のではこれは不可能です。私はビットマスク表現を直接列挙型に書くのは避けたい。このように:
...
Gray = ((2 << 8) | 0),
...
どのようなアイデアですか?
P.S.
はい、私は構文的な砂糖フリークです。 :D
良いアイデア。唯一の問題は、属性の評価がどれだけ速いかということです。 – armen
この解決策では、リフレクションを使用するとパフォーマンスが低下します。各列挙型メンバのプロパティをspeedの値に含める場合は、別のWarm/Coldアレイを使用し、列挙型メンバの整数値をインデックスとして使用することもできます(たとえば、 'warmcold [(int)Colors.Gray]' – Virtlink
まあ、彼らは反射を通してアクセスされるので、光の速度を期待しないでください。 –