考慮下面的代碼:正在改變一個枚舉的突破變化的數量?
public enum SomeCode
{
NIF = 0
,NIE = 1
,CIF = 2
,PAS = 3
,NIN = 4
,SSN = 5
,OTH = 5
,UKN = 6
}
會改變OTH = 5
到OTH = 7
是一個重大更改?
編輯:我從來沒有存儲的int值,只有文本表示的枚舉。它可能用於其他DLL,但將使用相同的存儲。
考慮下面的代碼:正在改變一個枚舉的突破變化的數量?
public enum SomeCode
{
NIF = 0
,NIE = 1
,CIF = 2
,PAS = 3
,NIN = 4
,SSN = 5
,OTH = 5
,UKN = 6
}
會改變OTH = 5
到OTH = 7
是一個重大更改?
編輯:我從來沒有存儲的int值,只有文本表示的枚舉。它可能用於其他DLL,但將使用相同的存儲。
這是一個突破性的改變,因爲你正在改變一個公共API。
使用舊值構建的庫/應用程序仍將保留舊值並使用它。你將需要重新編譯它們。
從MSDN - enum (C# Reference):
正如任何常量,以枚舉的單獨的值均引用在編譯時轉換爲數字文字。這可能會產生潛在的版本問題,如常量(C#編程指南)中所述。
這取決於您是否擁有對解決方案的完整代碼的控制權,或者您是否在導出供他人使用的庫。
有與公開曝光consts類似的陷阱。
一般來說,假設是 - 這是一個突破!
即使你是唯一的消費者,它仍然可能是一個突破性的改變。如果代碼中的任何地方在int值之間進行投票以獲取枚舉值,則可能導致異常或(更糟糕)返回錯誤的值。例如,通過使用表的主鍵作爲枚舉的值,將數據庫中的值映射到枚舉並不少見。 – 2010-08-06 08:48:51
它會的。假設您將一些數據存儲爲枚舉中的int,將來檢索數據會給出錯誤的結果。對於這種情況,在更改之前爲OTH存儲的數據不會像OTH那樣存儲OTH,因爲您目前正在爲OTH存儲5個數據,您將在未來獲得5個數據,並且同樣需要7個數據。
首先,SSN和OTH = 5,是否是拼寫錯誤,否則使用此枚舉的switch語句的編譯時錯誤? 現在,將OTH = 5更改爲OTH = 7,如果您使用枚舉爲SomeCode someCode = (SomeCode)5
,則會發生突變。
這不是一個錯字,因此改變它的問題。它永遠不會在開關狀態中使用,所以沒有編譯時錯誤。 – cjk 2010-08-06 08:58:34
這取決於。只有在您確認沒有人依賴其值爲5或與SSN相同的值時,或者您可以重構這種依賴關係時,纔會發生這種非重大更改。
雖然確實如果沒有人依賴於它的值爲5,它並不是一個突破性改變,值得注意的是任何人使用它都取決於它是5,即使這在代碼中並不明確。
如果我寫對本次大會類似的代碼:
if(myVal == SomeCode.OTH)
{
//do something
}
然後在內部是比較它的5儘管5號沒有我的源代碼中的任何地方出現的值,所以它會如果我部署新版本的程序集,請打破。
保存優雅是我不需要重新編寫來處理這個重大變化,只需重新編譯即可。
感謝您的支持。所有我需要的信息。 – cjk 2010-08-06 08:59:32