当前位置: 首页 > 编程语言 > C#

C#sizeof(enumeration)替代方案?(解决方法resharperfalse错误)?分享

时间:2023-04-10 19:20:54 C#

C#sizeof(enum)替代方案?(解决方法resharperfalse错误)?在C#中,我有一些与UAC提升相关的“安全”API代码。它涉及获取枚举的大小(如下)intmyEnumSize=sizeof(MyEnum);代码本身是有效的,可以编译,工作正常等。但是Resharper在解决方案中错误地将其标记为错误(“无法在安全的上下文中使用不安全的构造”)。(从C#2.0版开始,将sizeof应用于内置类型不再需要使用不安全模式。)我喜欢Resharper,我喜欢解决方案分析,但是在解决方案中使用这段代码我有一个大红点,它让我觉得角落里有东西坏了。如果我告诉resharper忽略此错误,它会在几分钟后返回。我会向JetBrains提出这个问题,但我查看了他们的跟踪器,发现他们已经有一个自3月以来一直被忽略的记录。进一步看,几年前他们至少还有两起这样的记录在案的事件,都被解雇了,并且处于“不再重复”状态。我不想注册他们的跟踪器只是为了对这个错误进行投票。我可能会屏住呼吸多年。最快的方法就是解决这个问题。最好的替代方案是什么,它仍然是正确的并且以后给维护者带来麻烦的可能性最小?我可以硬编码:intmyEnumSize=4;有没有更正确的解决方案?-哪个不使用sizeof(enum)?顺便说一句:Marshal.SizeOf()是完全“安全”的,但返回错误的大小。附言。问题中的代码深受微软的UACSelfElvation演示代码的影响。如果你想要更多的细节。但我认为它们没有关系。看起来很难看,但可能有效:intmyEnumSize=Marshal.SizeOf(Enum.GetUnderlyingType(typeof(MyEnum)));由JohnGietzen编辑:证书:enumEnum1:sbyte{A,B,C,D}enumEnum2:short{A,B,C,D}enumEnum3:int{A,B,C,D}enumEnum4:long{A,B,C,D}enumEnum5:byte{A,B,C,D}enumEnum6:ushort{A,B,C,D}enumEnum7:uint{A,B,C,D}enumEnum8:ulong{A,B,C,D}sizeof(Enum1):1sizeof(Enum2):2sizeof(Enum3):4sizeof(Enum4):8sizeof(Enum5):1sizeof(Enum6):2sizeof(Enum7):4sizeof(Enum8):8Marshal.SizeOf(Enum.GetUnderlyingType(typeof(Enum1))):1Marshal.SizeOf(Enum.GetUnderlyingType(typeof(Enum2))):2Marshal.SizeOf(Enum.GetUnderlyingType(typeof(Enum3))):4Marshal.SizeOf(Enum.GetUnderlyingType(typeof(Enum4))):8Marshal.SizeOf(Enum.GetUnderlyingType(typeof(Enum5))):1Marshal.SizeOf(Enum.GetUnderlyingType(typeof(Enum6)))):2Marshal.SizeOf(Enum.GetUnderlyingType(typeof(Enum7))):4Marshal.SizeOf(Enum.GetUnderlyingType(typeof(Enum8))):8正确的解决方案是在此行之前添加注释,说明该工具正在生成不正确的警告这将防止未来的维护者感到困惑并试图修复一些未损坏的东西.我认为(如果你真的、真的想要)你可以在枚举上使用开关/案例。但我的猜测是大小是有原因的。如果您对获取枚举的基础数据对象的大小感兴趣,可能更好的方法是首先获取System.Type对象。类型type=typeof(MyEnum);intenumSize=sizeof(Enum.GetUnderlyingType(type));您可以在ReSharper中忽略这一点,但这会带来一些痛苦并且会影响/更改您的设计。您可以在其自己的文件中使用Enum定义和方法来获取类中的大小(使用sizeof),然后单击ReSharper>Options…>CodeInspection>Settings>EditItemstoSkip,然后选择该文件(我使用R#5.1).显然你不会得到代码分析,但你仍然可以清除代码格式。以上就是C#学习教程:C#sizeof(enumeration)alternative?(解决方法resharperfalse错误)?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: