根据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()
,这样肯定会失败,但编译通过就好了。
那么我如何使用代码契约来使编译时断言?
答案 0 :(得分:1)
这是因为代码契约与编译时断言不同。它们仍然是运行时代码,但它们还带有静态分析规则集,您可以在项目中启用它来执行您要查找的内容。
看看这个看起来已经很好地回答了这个问题的问题:Contract.Assert do not throw compilation error