如何使用代码约定在C#中使用编译时断言?

如何使用代码约定在C#中使用编译时断言?,第1张

概述根据 this answer C#现在有“代码契约”应该可用而不是C编译断言.现在我有了这个神奇的代码: IntPtr pointer;//blahblahblahpointer = new IntPtr(pointer.ToInt32() + Marshal.SizeOf(typeof(SomeStruct))); 这要求IntPtr与Int32具有相同的大小.所以我想要一个编译时断言 – 根据 this answer C#现在有“代码契约”应该可用而不是C编译时断言.现在我有了这个神奇的代码:

IntPtr pointer;//blahblahblahpointer = 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 itpointer = new IntPtr(pointer.ToInt32() + Marshal.SizeOf(typeof(SomeStruct)));

我将false传递给Assert()以便它肯定会失败,但编译通过就好了.

那么如何使用代码契约来编译时断言呢?

解决方法 那是因为代码契约与编译时断言不同.它们仍然是运行时代码,但它们还带有静态分析规则集,您可以在项目中启用它来执行您要查找的内容.

看看这个看起来已经很好地回答了这个问题的问题:Contract.Assert do not throw compilation error

总结

以上是内存溢出为你收集整理的如何使用代码约定在C#中使用编译时断言?全部内容,希望文章能够帮你解决如何使用代码约定在C#中使用编译时断言?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存