我有這個列舉實體
public enum MyEnum {A1 = 0, A2 = 0}
我希望成員A1 A2在評估時產生相同的值,但在比較時不應被視為相等。
因此在以下函式中
private int evalEnum(MyEnum enumInstance) {
if(enumInstance == MyEnum.A1)
//some logic
else if(enumInstance == MyEnum.A2)
//some logic
return (int) enumInstance;
}
我不希望函式進入第一個if陳述句 if enumInstanceis of type A2。我也嘗試使用Equalsand ,但據我了解,只要和被分配給相同的值,CompareTo它們在第一個 if 陳述句中也會評估為true( ) 。0A1A2
總而言之;即使它們被賦予相同的值,是否可以評估A1和不相等?A2如果是這樣,實作這一目標的最佳方法是什么?
uj5u.com熱心網友回復:
僅使用列舉無法做到這一點。列舉只是具有指定名稱的 int 值,無法區分 A1 和 A2,因為它們具有相同的實際值。
您需要一些中間映射,例如:
public enum MyEnum {A1 , A2 }
public Dictionary<MyEnum, int> MyEnumToValue = new (){{MyEnum.A1, 0},{MyEnum.A2, 0}};
這為您提供了一種從 A1/A2 獲得相同值的簡單方法,同時仍允許它們進行不相等的比較。
uj5u.com熱心網友回復:
由于enum實際上是整數型別(byte,等) int,long因此您必須為and分配不同的值:A1A2
public enum MyEnum {
A1 = 0,
A2 = 0
};
而且沒有辦法區分A1和A2編譯
// if (enumInstance == 0)
if (enumInstance == MyEnum.A1)
...
// else if (enumInstance == 0)
else if(enumInstance == MyEnum.A2)
... // <- unreachable code
如果您遇到諸如“要么A1或A2”之類的情況——您嘗試為兩者分配相同值的原因A1并且A2您堅持enum,您可以嘗試標記enumwith[Flags]屬性
[Flags]
public enum MyEnum {
None = 0b000, // Neither A1 or A2
A = 0b001, // Either A1 or A2
A1 = 0b011, // Exactly A1
A2 = 0b111, // Exactly A2
};
然后
if (enumInstance.HasFlag(MyEnum.A)) {
// Either A1 or A2
}
if (enumInstance == MyEnum.A2) {
// Exactly A2
}
uj5u.com熱心網友回復:
我找到了一個簡單的解決方法,它最能解決我的問題。
那就是簡單地使用模來允許所有成員MyEnum具有不同的值,同時仍然評估相同的值。
這種方法還使得添加列舉成員變得非常容易,MyEnum而且不會占用任何額外的記憶體空間。
public enum MyEnum {A1 = 0, A2 = 10, A3 = 20, B1 = 1, B2 = 11, B3 = 21,...}
private int evalEnum(MyEnum enumInstance) {
if(enumInstance == MyEnum.A1)
//some logic
else if(enumInstance == MyEnum.A2)
//some logic
else if(enumInstance == MyEnum.B1)
.
.
.
return ((int) enumInstance) % 10;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495627.html
上一篇:可空背景關系在C#中無法正常作業
