提前道歉,因爲我確信有人以前一定問過這個問題,但我找不到它。Enums,overlapping values,C#
剛剛有一個驚喜,我和一個同事爲enum增加了相同的值,並且它編譯了,例如,
enum MyEnum
{
mine = 1,
his = 1
}
看起來像C/C++支持這也(?)。任何這種行爲的原因,任何情況下,它是有用的?我看到一個案例有區別人類語言(一個= 1,EINS = 1等),但我不相信
感謝
提前道歉,因爲我確信有人以前一定問過這個問題,但我找不到它。Enums,overlapping values,C#
剛剛有一個驚喜,我和一個同事爲enum增加了相同的值,並且它編譯了,例如,
enum MyEnum
{
mine = 1,
his = 1
}
看起來像C/C++支持這也(?)。任何這種行爲的原因,任何情況下,它是有用的?我看到一個案例有區別人類語言(一個= 1,EINS = 1等),但我不相信
感謝
讓我們舉一個簡單的例子
enum PrivilegeLevel
{
None,
Reporter,
Reviewer,
Admin,
DefaultForNewUser = None,
DefaultForProjectOwner = Reviewer,
};
由於常量的二進制版本化語義,這聽起來像一個壞主意。 – CodesInChaos
你是什麼意思版本化常量的語義? – crazyjul
@crazyjul常量不能版本化。如果你改變一個常量(見,這是一個矛盾),所有使用它的程序集現在都被破壞了,因爲它們仍然使用舊的值。你不會改變pi的價值,你會嗎?但是您可能想要更改默認特權級別。 –
的想法枚舉類型的後面是創建新的數據類型,這些數據類型只能使用限制範圍的值。
你所做的是合法的,編譯器不應該給任何錯誤,因爲枚舉只是一個常量。你只是給你一個合乎邏輯的名字。
當需要分隔命名常量時,可以將相同的值分配給兩個或更多枚舉常量。假設你有一個配色方案,它們都使用相同的基本顏色,但是方案需要在邏輯上分開。然後你可以使用枚舉常量的相同值。但仍然有更好的方法來做到這一點。
「如果將相同的值賦給兩個或更多枚舉常量,枚舉的整個用途就會減少。」我不同意。枚舉的全部目的是讓你使用名字而不是幻數。我看不出具有相同幻數的兩個名字是不好的。 –
@ R.MartinhoFernandes:我全心全意地同意你的不同意見。有時候別名是好事。 –
我想這不會比C++ typedef更糟糕,只是在當時感到驚訝 – tony
所以,也許你能做到這一點'枚舉MyEnum { [作廢]礦= 1, 他= 1 }' – V4Vendetta
據推測,如果你正在價值觀明確你*護理*什麼,這些價值觀是,所以這種衝突不應該發生。如果你不關心每個成員代表什麼價值,你可以不讓他們明確,不會發生衝突。 –