Ang*_*ore 0 .net c# arrays enums
在我的项目中,我使用的是一个bool数组,它定义了用户的访问权限.例如
public bool[] Security {get; set;}
Run Code Online (Sandbox Code Playgroud)
哪里
[0] = Admin
[1] = GrantWrites
[2] = GrantDeletes
[3] = User
Run Code Online (Sandbox Code Playgroud)
它工作得很好.我会将它设置为{F,T,F,T}或{0,1,0,1},并且该特定用户可以作为用户进行访问,并允许他编写.
我试图将它转换为枚举,但显然我需要一个数组.
目前我有以下(不工作)
public class UserCrops
{
public UserCrops(etc.., Enum[] _Security)
{
.
.
.
Security = _Security;
}
.
.
.
public Enum[] Security
{
Admin,
GrantWrites,
GrantDeletes,
User
}
Run Code Online (Sandbox Code Playgroud)
}
我发现像一些链接这个,但没有帮助.
提前致谢
编辑:这两个答案都得到了很好的解释,但我会选择非Flag一个,因为它对我来说似乎更容易:)
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));
Run Code Online (Sandbox Code Playgroud)
但现在?
试试:
[Flags]
public enum Security
{
Admin = 1,
GrantWrites = 2,
GrantDeletes = 4,
User = 8
}
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它:
Security security = Security.GrantWrites | Security.GrantDeletes;
if ((security & Security.GrantWrites) == Security.GrantWrites)
{
}
Run Code Online (Sandbox Code Playgroud)
如pswg所指出的,可以简化比较以增加其可读性.此外,我建议在enum(对于未初始化变量时)中包含一个默认值:
[Flags]
public enum Security
{
None = 0,
Admin = 1,
GrantWrites = 2,
GrantDeletes = 4,
User = 8
}
Run Code Online (Sandbox Code Playgroud)
最后请注意,您可以为常用的标志组合提供快捷方式:
[Flags]
public enum Security
{
// Other values
FullAccess = Admin | GrantWrites | GrantDeletes
}
Run Code Online (Sandbox Code Playgroud)
更多关于MSDN的内容.请注意,此方法模仿文件系统(以及许多其他文件)中文件/目录的属性.使用IMO比使用其他答案中建议的一系列枚举更简单:
null值(enum不能null,数组可以).但与此相比,它有两个主要缺点:
Int32你enum或64的Int64).Security必须成为一个类,您需要编写更多代码来模仿枚举语法,并且在使用枚举时代码所做的某些假设将被破坏).删除[]并使用enum而不是Enum:
public enum Security
{
Admin,
GrantWrites,
GrantDeletes,
User
}
Run Code Online (Sandbox Code Playgroud)
你可能想Security[]用作方法参数:
public UserCrops(etc.., Security[] _Security)
Run Code Online (Sandbox Code Playgroud)
使用标记(如Adriano建议的那样)也是一个很好的建议,但它需要您重新考虑如何存储您的权限.您不是存储数组bool,而是将整个安全集表示为单个值,不同的位表示每个权限.
阅读枚举类型(C#编程指南)下的部分枚举类型作为位标志以获取更多信息.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |