【发布时间】:2015-06-08 16:40:50
【问题描述】:
我看过类似的问题,但他们似乎没有处理我遇到的相同问题。
我有一个定义为 CRUD 权限测试的枚举
public enum CRUDOperation
{
NotNeeded = 0,
Read = 1,
Create = 2,
Update = 4,
Delete = 8
}
我没有编写下一部分代码,这就是为什么我可能会感到困惑的原因,但是随后将与角色关联的 CRUD 权限值以下列方式放入“限制”字符串中。
Restrictions = "";
foreach (string inCrud in restrictions)
{
string crud = inCrud.ToUpper();
int res = 0;
if (crud.Contains('C'))
res |= (char)CRUDOperation.Create;
if (crud.Contains('R'))
res |= (char)CRUDOperation.Read;
if (crud.Contains('U'))
res |= (char)CRUDOperation.Update;
if (crud.Contains('D'))
res |= (char)CRUDOperation.Delete;
Restrictions += (char)res;
}
现在我需要解析这个“限制”字符串来检查给定角色是否具有适当的 CRUDOperation 权限级别。然而,字符串中充满了随机的 ascii 字符,我只是很难理解如何正确地做到这一点。我以前根本没有使用过位掩码。我正在尝试这样做;
CRUDOperation operation = (CRUDOperation)Enum.Parse(typeof(CRUDOperation), p.Restrictions);
但我收到错误“未找到请求的值''。”
有人有什么建议吗?
【问题讨论】:
-
这似乎是一种非常简单的方法,非常令人困惑。
-
我不确定第二段代码是否符合原作者认为的功能。使用
Flags属性会容易得多... -
那么它到底在做什么呢?我对正在发生的事情的印象是将枚举值添加到限制字符串中的 0 或字符转换?
-
当您将枚举值转换为 char 时,您会从 ASCII 表中获取 char 0(不可打印字符),而不是表示 0 的字符,即 ASCII 表中的 48。而且,我同意@Icemanind,这段代码过于复杂。
-
我不确定我是否会称写这篇文章的人为“更好的编码器”。
标签: c# string enums enumeration