【发布时间】:2013-07-19 08:15:39
【问题描述】:
根据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(),这样它肯定会失败,但编译通过就好了。
那么如何使用代码契约来进行编译时断言?
【问题讨论】:
-
它仍然没有正确地折叠到 C# 中 - 尽管
Contracts类在mscorlib中,但您仍然必须单独安装然后启用合同检查。没有迹象表明 VS2013 已经支持,而且插件也没有更新。 -
顺便说一句,Code Contracts extension 上周更新为支持 VS2013。
标签: c# code-contracts static-assert