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