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