根据这个答案, 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()
所以它肯定会失败,但编译通过就好了。
那么如何使用代码契约来进行编译时断言呢?