簡體   English   中英

如何使用枚舉[]?

[英]How to use an Enum[]?

在我的項目中,我使用的是定義用戶訪問權限的布爾數組。 例如

public bool[] Security {get; set;}

哪里

[0] = Admin
[1] = GrantWrites
[2] = GrantDeletes
[3] = User

運行良好。 我將其設置為{F,T,F,T}或{0,1,0,1},並且該特定用戶可以作為User獲得訪問權限,並允許他進行寫操作。

我試圖將其轉換為枚舉,但顯然我將需要它的數組。

目前我有以下(無法正常工作)

public class UserCrops
{
    public UserCrops(etc.., Enum[] _Security)
    {
    .
    .
    .
        Security = _Security;
    }
    .
    .
    .
    public Enum[] Security
    {
        Admin,
        GrantWrites,
        GrantDeletes,
        User
    }

}

我發現像一些鏈接這個 ,但沒有幫助。

提前致謝

編輯:這兩個答案都很好地解釋了,但我只使用非標記一個是因為對我來說似乎更容易:)

Edit2:我如何創建一個新的對象(類之外)?

bool[] security = new bool[9];
for (int i = 0; i < 9; i++)
    {
    security[i] = chklstSecurity.Items[i].Selected;
}
userCropList.Add(new UserCrops(.., txtBiologicalAssessmentApprovalDate.Text, security));

但現在?

嘗試:

[Flags]
public enum Security
{
    Admin = 1,
    GrantWrites = 2,
    GrantDeletes = 4,
    User = 8
}

您將像這樣使用它:

Security security = Security.GrantWrites | Security.GrantDeletes;

if ((security & Security.GrantWrites) == Security.GrantWrites)
{
}

pswg指出可以簡化比較以提高其可讀性。 此外,我建議在enum包含一個默認值(用於未初始化變量的情況):

[Flags]
public enum Security
{
    None = 0,
    Admin = 1,
    GrantWrites = 2,
    GrantDeletes = 4,
    User = 8
}

最后請注意,您可以為標志的常見組合提供快捷方式

[Flags]
public enum Security
{
    // Other values
    FullAccess = Admin | GrantWrites | GrantDeletes
}

有關MSDN的更多信息。 請注意,此方法模仿文件系統(以及許多其他文件)中文件/目錄的屬性。 IMO比保留另一個答案中建議的枚舉數組簡單得多:

  • 您不必搜索整個數組即可檢查是否授予了權限。
  • 您不必檢查是否為null值( enum不能為null ,數組可以是)。
  • 它使用的空間更少(即使如今這並不重要)。
  • 這自然是(更) 安全的,因此需要較少的檢查(例如,避免在數組內重復)。
  • 它可以容易地存儲(作為文本或整數,而無需其他代碼)。

相比之下,它有兩個主要缺點:

  • 標志是有限的(如果您將Int32用於enum ,則為32;對於Int64使用64)。
  • 您不能輕易切換到其他內容(例如,如果必須將Security變成一個類,則您需要編寫更多代碼來模仿枚舉語法,並且使用枚舉時由代碼做出的某些假設將被破壞)。

刪除[]並使用enum代替Enum

public enum Security
{
    Admin,
    GrantWrites,
    GrantDeletes,
    User
}

您可能希望將Security[]用作方法參數:

public UserCrops(etc.., Security[] _Security) 

使用標志(如Adriano所建議的 )也是一個很好的建議,但它需要您重新考慮如何存儲權限。 不用存儲bool數組,而是將整個安全性集表示為單個值,用不同的位表示每個權限。

有關更多信息,請閱讀 枚舉類型作為位標志 ”部分下的枚舉類型(C#編程指南)

暫無
暫無

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

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