1

在java中我有:

public enum MyEnum{

    Value1,
    Value2,
    Value3,
  //so on
    }

还有一个具有属性的类:

public abstract class MyClass{
public EnumSet<MyEnum> myEnum= EnumSet.noneOf(MyEnum.class); }

但也有一个 Level 接口将 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# 的角度处理这种情况?

4

2 回答 2

1

C# 枚举是常量,Java 枚举是类。要实现类似于 Java 的功能,您可以:

  1. 创建完整的 c# 类和/或:
  2. 使用按位逻辑和/或:
  3. 使用反射和/或
  4. Enum.GetValues(typeof(...))
于 2015-04-30T23:28:46.507 回答
1

我建议使用微软文档中解释的 [Flags] 属性

[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# 接口不能包含带有值的属性。在java中它可以但不应该,它们确实是常量。有关更多信息,请参阅此答案

于 2019-02-25T15:50:59.983 回答