【发布时间】:2010-11-18 20:44:19
【问题描述】:
在 C# 中,我有一些与 UAC 提升相关的“安全”API 代码。它涉及获取枚举的大小(如下)
int myEnumSize = sizeof (MyEnum);
代码本身是有效的,可以编译,正常工作等。但是 Resharper 错误地将其标记为解决方案中的错误(“不能在安全上下文中使用不安全的构造”)。 (Starting with version 2.0 of C#, applying sizeof to built-in types no longer requires that unsafe mode be used.) 我喜欢 Resharper,我喜欢解决方案分析,但是在解决方案中使用此代码时,我的角落里有一个大红点,让我总觉得有些东西坏了。如果我告诉 resharper 忽略此错误,它会在几分钟内返回。
我会向 JetBrains 提出这个问题,但我查看了他们的跟踪器,他们已经记录了一个自 3 月以来一直被忽略的日志。再往前看,他们至少有两个其他实例可以追溯到几年前,都以“无复制”状态被解雇。我不想注册他们的跟踪器只是为了给这个错误投票。我仍然可以屏住呼吸好几年。最快的方法就是解决这个问题。
什么是最好的替代方案,它仍然是正确的,并且以后给维护者带来任何麻烦的可能性最小?
我可以将其硬编码为:
int myEnumSize = 4;
还有更正确的解决方案吗? -- 哪个不使用 sizeof(enum)?
顺便说一句:
Marshal.SizeOf()
完全“安全”,但返回错误的大小。
PS。有问题的代码深受来自 Microsoft 的 UACSelfElvation 演示代码的影响。如果你想了解更多细节。但我认为它们无关紧要。
【问题讨论】:
标签: c# interop resharper sizeof