在C#中,我有一些与UAC提升相关的“安全”API代码。它涉及到得到一个枚举的大小(如下)C#sizeof(enum)的替代? (解决方法resharper虚假错误)?
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月以来被忽略的日志。进一步看,他们至少有两个这种记录可以追溯到几年的其他实例,两者都以“无复制”状态被解雇。我不想注册他们的跟踪器来投票给这个bug。多年来我仍然可以屏住呼吸。最快的方法就是解决这个问题。
什么是最好的选择,仍然是正确的,有最小的机会导致维护人员后来有任何麻烦?
我可以硬编码它:
int myEnumSize = 4;
的是,有更多的正确的解决方案? - 哪个不使用sizeof(枚举)?
BTW:
Marshal.SizeOf()
完全是 “安全的”,但返回错误的大小。
PS。问题中的代码深受来自Microsoft的UACSelfElvation演示代码的影响。如果你想要更多的细节。但我认为它们不相关。
确认工作。 – 2010-11-18 21:05:58
完美。这正是我所期待的。它的工作原理,即使它不漂亮,评论显示更简洁的方式,并指出为什么它没有在这里使用,这将是伟大的。谢谢。这正是我在问Stackoverflow时所希望的。 – DanO 2010-11-18 21:53:49