C# 如何比较两个枚举?

C# 如何比较两个枚举?,c#,java,C#,Java,这是我的密码 [Flags] public enum Colors { None = 0, Red = 1, Yellow = 2, Blue = 4, Green = 8, Orange = 16, Brown = 32, Cyan = 64, Magenta = 128, Other = 256 }; class Program { Colors familyRGB = Colors.Red | Colors.Blue | Colors.Green; Colors fa

这是我的密码

[Flags]
public enum Colors { None = 0, Red = 1, Yellow = 2, Blue = 4, Green = 8, Orange = 16, Brown = 32, Cyan = 64, Magenta = 128, Other = 256 };



class Program
{
    Colors familyRGB = Colors.Red | Colors.Blue | Colors.Green;
    Colors familyCMY = Colors.Cyan | Colors.Magenta | Colors.Yellow;
    Colors familyRYB = Colors.Red | Colors.Blue | Colors.Yellow;
我必须写一个方法,它以两个族作为参数,并且做的事情很少 所以我做了这个

public static void TwoFamilyColorSystem(Colors family1, Colors family2)
我想打印族1中存在而族2中不存在的图元。 我该怎么做?
例如,如果我使用RGB和RYB,它应该打印为绿色,因为绿色存在于RGB中,而不是RYB中。

类似的东西应该可以做到这一点,它将返回每个枚举值的可枚举值,这些值只属于给定的两个族中的一个(并且正好是一个):

公共静态IEnumerable Two FamilyColor系统(颜色系列1,颜色系列2)
{
foreach(Enum.GetValues()中的颜色值)
if(family1.HasFlag(值)和&!family2.HasFlag(值))
收益回报值;
}

~
反转位。因此:

return (Colors)(family1 & ~family2);
由于问题已标记,因此您可以在Java中这样做:

公共枚举颜色{
无(0)、红色(1)、黄色(2)、蓝色(4)、绿色(8)、橙色(16)、棕色(32)、青色(64)、品红(128)、其他(256);
public static final Set familyRGB=Collections.unmodifiableSet(EnumSet.of(红色、蓝色、绿色));
public static final Set familyCMY=Collections.unmodifiableSet(EnumSet.of(青色、洋红、黄色));
public static final Set familyRYB=Collections.unmodifiableSet(EnumSet.of(红色、蓝色、黄色));
私有最终整数标志;
专用颜色(int标志){
this.flag=flag;
}
public int getFlag(){
返回此.flag;
}
公共设置为家庭(){
返回(此)的枚举集;
}
/**
*返回{@code a}中不在{@code b}中的颜色。
*/
公共静态集减法(集a、集b){
EnumSet c=EnumSet.copyOf(a);
c、 removeAll(b);
返回c;
}
}
标志
值未用于此目的,可能会被删除,但保留在此处,以防用于其他目的

试验

System.out.println(Colors.subtract(Colors.familyRGB,Colors.familyRb));
System.out.println(Colors.subtract(Colors.familyRGB,Colors.Blue.toFamily());
输出

[绿色]
[红色,绿色]

这与Java有什么关系?欢迎使用堆栈溢出。请学习如何使用堆栈溢出,并阅读如何提高问题的质量。然后检查,看看你可以问什么问题。请显示您尝试过的尝试以及您尝试过的问题/错误消息。OP不会要求相反的结果。只有那些在第一个不是在第二个足够公平,修复!