CA1700:不要在列舉值名稱中包含 'Reserved'
型別名稱 |
DoNotNameEnumValuesReserved |
CheckId |
CA1700 |
分類 |
Microsoft.Naming |
中斷變更 |
中斷 |
原因
列舉型別成員的名稱會包含 "reserved" 這個字。
規則描述
這項規則假設名稱中包含 "reserved" 的列舉成員目前並未使用,但是在未來版本會是重新命名或移除的替代符號 (Placeholder)。 重新命名或移除成員是中斷變更。 您不應該預期使用者會只因成員名稱包含 "reserved" 就會忽略該成員,也不能依賴使用者讀取或遵守文件。 此外,由於保留的成員會出現在物件瀏覽器和智慧型整合式開發環境中,所以在不知道真正使用哪些成員的情況下,它們可能會導致混淆。
因此不是使用保留的成員,而是在未來版本將新的成員加入到列舉型別。 在大部分情況下,只要新成員的加入不會導致原始成員值的變更,則這個加入便不是中斷變更。
只有在某些情況下,即使原始成員仍然保持它的原始值,加入成員的作業仍是中斷變更。 主要是因為呼叫端在包含整個成員清單的傳回值,以及在預設情況下發生例外狀況的傳回值上使用 switch (在 Visual Basic 中為 Select),若沒有中斷這個呼叫端,將無法從現有的程式碼路徑傳回新的成員。 其次是因為用戶端程式碼可能無法從反映 (Reflection) 方法 (例如 Enum.IsDefined) 處理行為中的變更。 因此,如果現有的方法必須傳回新成員,或已知的應用程式因為不良的反映使用方式而發生不相容,則唯一非中斷的解決方案就是:
新增包含原始和新成員的新列舉。
使用 System.ObsoleteAttribute 屬性標示原始列舉。
對於任何公開 (Expose) 原始列舉型別的外部可見型別或成員,請遵循相同程序。
如何修正違規
若要修正違反此規則的情形,請移除或重新命名該成員。
隱藏警告的時機
對於目前所使用的成員或先前提供的程式庫,您可以放心地隱藏這項規則的警告。