在java中我有:
public enum MyEnum{
Value1,
Value2,
Value3,
//so on
}
还有一个具有属性的类:
public abstract class MyClass{
public EnumSet<MyEnum> myEnum= EnumSet.noneOf(MyEnum.class); }
而且还有一个 Level 接口(interface),它按级别对 MyEnum 进行分组:
public interface Level{
public EnumSet<MyEnum> LEVEL0 = EnumSet.of(Value1,
Value2,
//etc;}
public EnumSet<MyEnum> LEVEL1 = EnumSet.of(Value3,
Value4,
//etc;}
还使用了 myEnum 上使用的函数,例如 clone()、addAll()。 从 C# 的角度我应该如何处理这种情况?
最佳答案
我建议使用 [Flags] 属性,如所解释的 in the microsoft docs
[Flags]
public enum MyEnum
{
None = 0,
Value1 = 1 << 0,
Value2 = 1 << 1,
Value3 = 1 << 2,
Value4 = 1 << 3,
//so on
}
public abstract class MyClass
{
public MyEnum myEnum = MyEnum.None;
public void testing()
{
// Initialize with two flags using bitwise OR.
MyEnum workingFlags = MyEnum.Value1 | MyEnum.Value3;
// Set an additional flag using bitwise OR.
workingFlags= workingFlags| MyEnum.Value4;
// workingFlags: Value1, Value3, Value4
// Remove a flag using bitwise XOR.
workingFlags = workingFlags ^ MyEnum.Value3;
// workingFlags: Value1, Value4
// Test value of flags using bitwise AND.
bool test = (workingFlags & MyEnum.Value3) == MyEnum.Value3;
// test = true;
}
}
public abstract class Level
{
public MyEnum LEVEL0 = MyEnum.Value1 | MyEnum.Value2;
public MyEnum LEVEL1 = MyEnum.Value3 | MyEnum.Value4;
}
C# 接口(interface)不能包含带有值的属性。在java中它可以但不应该,而且它们确实是常量。看这个this answer了解更多信息。
关于java - 当需要对级别进行分组时,C# 中的 EnumSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979362/