根据
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] 举报,一经查实,本站将立刻删除。