![](/img/trans.png)
[英]Workaround of MS Code Analysis rule CA1008: Enums should have zero value
[英]CA1008: Enums should have zero value and Flag enums
即使我完全知道為什么存在CA1008警告,在以下情況下我也不知道如何避免它。 我有一個Flag枚舉,含義如下:
ValidValue = 0x01
WrittenValue = 0x02
因此,在這種情況下,0表示InvalidValueNonWritten而不是None。 規則說
除先前附帶的帶有標志屬性的枚舉外,請勿禁止此規則發出警告。
在這種情況下,我還沒有交付枚舉,那么如何防止此警告?
編輯:
該警告明確指出:
警告86 CA1008:Microsoft.Design:在枚舉“ XXX”中,將“ XXX.InvalidValueNonWritten”的名稱更改為“ None”。
編輯2:
枚舉的更多狀態:
CommandValue = 0x04 // Otherwise it is DataValue
InmediateValue = 0x08 // Otherwise it is Deferred
在此特定時刻,0值具有“無效或已寫入”的含義。 但是,如果添加更多枚舉成員,則不再是這種情況。 例如,如果添加ApprovedValue = 0x04
,則0表示“無效,書面或批准”。 這是始終將None
名稱用作0值的主要原因。
如果“ None
作為名稱沒有意義,則通常表示該枚舉設計或名稱存在缺陷。 在您的情況下,聽起來好像枚舉實際上表示值已通過的步驟 ,而不是數值的狀態 (通常不會使用標志枚舉)。 以下內容可能更接近您的期望(關聯的類可能具有一個名為CompletedValueProcessingSteps
類的屬性)?
[Flags]
enum ValueProcessingSteps
{
None = 0,
Validation = 1,
Writing = 2
}
如果為0表示InvalidValueNonWritten,則將InvalidValueNonWritten添加到枚舉中。 這樣就不會發生此警告。 如果您的枚舉中確實不應該包含0,請在代碼中取消警告,並確保將理由放在后面以供將來參考。
如果您期望由於0無效而導致的異常無效,則最好使用枚舉在您的方法中執行驗證。 同樣,這對於序列化比較好,例如,如果您在模型上使用序列化,則模型將使用源中缺少的成員反序列化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.