加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:53:30 所属栏目:百科 来源:网络整理
导读:根据 this answer C#现在有“代码契约”应该可用而不是C编译时断言.现在我有了这个神奇的代码: IntPtr pointer;//blahblahblahpointer = new IntPtr(pointer.ToInt32() + Marshal.SizeOf(typeof(SomeStruct))); 这要求IntPtr与Int32具有相同的大小.所以我想
根据 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读