<分区>
如果您有一个枚举,其中的值可以自然地分组到子集中。例如:
[Flags]
public enum Instrument
{
Lute,
Guitar,
Flute,
Drum
}
[Flags]
public enum InstrumentType
{
Percussion,
String,
Wind,
}
有很多方法可以做到这一点
1) 要将这些数据合并到一个单独的 Enum 中?
[Flags]
public enum ValidInstrument
{
Lute= Instrument.Lute| InstrumentType.String,
Guitar = Instrument.Guitar | InstrumentType.String,
Flute = Instrument.Flute | InstrumentType.Wind,
Drum = Instrument.Drum | InstrumentType.Percussion,
}
(假设枚举之间没有交叉值) 这将允许你做
(ValidInstrument | InstrumentType.String) == InstrumentType.String
判断一个乐器是不是弦乐器
2) 创建某种映射结构来做完全相同的事情?
public static InstrumentType GetInstrumentType(Instrument inst)
{
switch(inst)
{
case Instrument.Lute:
case Instrument.Guitar:
return InstrumentType.String
//etc.
}
}
3)属性?
public enum Instrument
{
[InstrumentType(InstrumentType.String)]
Lute,
[InstrumentType(InstrumentType.String)]
Guitar,
[InstrumentType(InstrumentType.Wind)]
Flute,
[InstrumentType(InstrumentType.Percussion)]
Drum
}
4) 在独立类(class)中?
public class ValidInstrument
{
public InstrumentType Type{get;set;}
public Instrument Instrument{get;set;}
}
使用静态运行时填充
这些方法中哪种更好,或者如果取决于情况,哪些因素会影响选择