gpt4 book ai didi

c# - 为什么遍历枚举返回重复键?

转载 作者:行者123 更新时间:2023-11-30 14:32:23 24 4
gpt4 key购买 nike

我现在正在处理一些关于注册表的事情。

我检查了 System.Security.AccessControl 中的枚举 RegistryRights

public enum RegistryRights
{
QueryValues = 1,
SetValue = 2,
CreateSubKey = 4,
EnumerateSubKeys = 8,
Notify = 16,
CreateLink = 32,
Delete = 65536,
ReadPermissions = 131072,
WriteKey = 131078,
ExecuteKey = 131097,
ReadKey = 131097,
ChangePermissions = 262144,
TakeOwnership = 524288,
FullControl = 983103,
}

这个枚举是按位的,我知道枚举可以包含重复值。我试图通过这段代码遍历枚举:

 foreach (System.Security.AccessControl.RegistryRights regItem in Enum.GetValues(typeof(System.Security.AccessControl.RegistryRights)))
{
System.Diagnostics.Debug.WriteLine(regItem.ToString() + " " + ((int)regItem).ToString());
}

还有 Enum.GetName(typeof(RegistryRights),regItem) 返回相同的键名。

我得到的输出是:


QueryValues 1
SetValue 2
CreateSubKey 4
EnumerateSubKeys 8
Notify 16
CreateLink 32
Delete 65536
ReadPermissions 131072
WriteKey 131078
<strong>ReadKey 131097
ReadKey 131097</strong>
ChangePermissions 262144
TakeOwnership 524288
FullControl 983103

有人可以告诉我为什么我得到重复的 key 吗?(“ReadKey”而不是“ExecuteKey”)如何我可以强制将 int 转换为值的第二个键?以及为什么 ToString 不返回真正的键值?

最佳答案

我认为您必须遍历枚举名称而不是值。像这样的东西:

foreach (string regItem in Enum.GetNames(typeof(RegistryRights)))
{
var value = Enum.Parse(typeof(RegistryRights), regItem);

System.Diagnostics.Debug.WriteLine(regItem + " " + ((int)value).ToString());
}

至于为什么会发生这种情况,如果值重复,运行时无法知道返回哪个名称。这就是为什么遍历名称(保证是唯一的)会产生您要查找的结果的原因。

关于c# - 为什么遍历枚举返回重复键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18558574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com