java - 当需要对级别进行分组时,C# 中的 EnumSet

标签 java c# enums enumset

在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/

相关文章:

Java 枚举返回 Int

java - 更改保留其 ID 的实体的类型

java - iText - 使用图像渲染页面底部的段落

java - 为什么建议不要使用内联条件?

c# - 比较 android(java) 和 c# 中的 md5 哈希

c# - WebBrowser OnPropertyChange 事件未触发

enums - 带有 if let 枚举匹配的条件编译,其中包含一个项目

java - 未找到类定义错误(错误名称 : components/FileChooserDemo)

c# - 如何覆盖 .NET 4 中动态对象的 PropertyDescriptor.GetValue 和 PropertyDescriptor.SetValue

java - 用于传递和调用方法引用的 Lambda 语法