簡體   English   中英

CA1008:枚舉應具有零值和標志枚舉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM