簡體   English   中英

Enum vs Constants / Class with Static Members?

[英]Enum vs Constants/Class with Static Members?

我有一組特定於應用程序的代碼(代碼與其名稱的一對一映射),並且我一直在使用C#中的枚舉來表示它們。 我現在不確定是否有必要。 值永遠不會改變,它們總是與這些標簽相關聯:

Workflow_Status_Complete = 1
Workflow_Status_Stalled = 2
Workflow_Status_Progress = 3
Workflow_Status_Complete = 4
Workflow_Status_Fail = 5

我應該使用帶有靜態成員的枚舉或類嗎?

int類型的靜態成員似乎不如我的枚舉。 你失去了枚舉的類型安全。 在調試時,您看不到符號名稱,只看到一個數字。

另一方面,如果一個條目不僅僅包含一個名稱/整數值對,那么一個類可能是一個好主意。 但是那些字段應該屬於那個類,而不是int。 就像是:

class MyFakeEnum
{
   public static readonly MyFakeEnum Value1=new MyFakeEnum(...);
}

使用枚舉。 即使您的代碼永遠不會改變,但通過檢查很難知道該值代表什么。 使用枚舉的眾多優勢之一。

enum RealEnum : uint
{
    SomeValue = 0xDEADBEEF,
}
static class FakeEnum
{
    public const uint SomeValue = 0xDEADBEEF;
}

var x = RealEnum.SomeValue;
var y = FakeEnum.SomeValue;
// what's the value?
var xstr = x.ToString(); // SomeValue
var ystr = y.ToString(); // 3735928559

甚至調試器也不會對你有所幫助,特別是如果有許多不同的值。

查看狀態模式,因為這是一個更好的設計。 根據您使用的想法,您將最終得到一個很大的開關/ if-else語句,這可能很難跟上。

我會傾向於枚舉,因為它們提供了更多信息,它們使您的代碼“更容易正確使用並且難以正確使用”。 (我認為引用來自實用程序員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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