我正在使用以下代码返回详细的文件夹权限
return (from permissionName in Enum.GetNames(typeof(FileSystemRights))
let val =
Convert.ToInt32(
Enum.Parse(typeof(FileSystemRights), permissionName), CultureInfo.InvariantCulture)
where
(val != 0x1f01ff) && (val != 0x301bf) && (val != 0x20089) && (val != 0x200a9) && (val != 0x116)
where ((int)this.FileSystemRule.FileSystemRights & val) > 0
select permissionName).ToList();
我如何获得简短版本:
换句话说,我只想返回
答案 0 :(得分:5)
只需列出您想要的权限,即可简化逻辑。例如:
private readonly FileSystemRights[] namesIWant = new FileSystemRights[]
{
FileSystemRights.FullControl,
FileSystemRights.Modify,
FileSystemRights.ReadAndExecute,
FileSystemRights.ListDirectory,
FileSystemRights.Read,
FileSystemRights.Write
};
然后,您的LINQ表达式变为:
return (from perm in namesIWant
where (this.FileSystemRule.FileSystemRights & perm) != 0
select perm.ToString()).ToList();
答案 1 :(得分:1)
我想和你分享一下,
为了使它适用于我,我必须将>
singe更改为==
@Jim Mischel的代码修改为:
return (from perm in namesIWant
where (this.FileSystemRule.FileSystemRights & perm) == perm
select perm.ToString()).ToList();
还会从FileSystemRights.ListDirectory,
移除NamesIWant
,因为它包含Read
和ReadData
,如果您保留它,则会有重复的值。