根据 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
关于c# - 如何使用代码契约在 C# 中进行编译时断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741240/