微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用代码约定在C#中使用编译时断言?

根据 this answer C#现在有“代码契约”应该可用而不是C编译时断言.现在我有了这个神奇的代码

IntPtr pointer;
//blahblahblah
pointer = new IntPtr(pointer.ToInt32() + Marshal.SizeOf(typeof(SomeStruct)));

这要求IntPtr与Int32具有相同的大小.所以我想要一个编译时断言 – 就像这个C代码

static_assert(sizeof(IntPtr)==sizeof(Int32))

所以我尝试了以下方法

System.Diagnostics.Contracts.Contract.Assert(false); //just to test it
pointer = new IntPtr(pointer.ToInt32() + Marshal.SizeOf(typeof(SomeStruct)));

我将false传递给Assert()以便它肯定会失败,但编译通过就好了.

那么如何使用代码契约来编译时断言呢?

解决方法

那是因为代码契约与编译时断言不同.它们仍然是运行时代码,但它们还带有静态分析规则集,您可以在项目中启用它来执行您要查找的内容.

看看这个看起来已经很好地回答了这个问题的问题:Contract.Assert do not throw compilation error

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐