为了账号安全,请及时绑定邮箱和手机立即绑定

C# dotnet "Require" 和断言

C# dotnet "Require" 和断言

C#
RISEBY 2022-07-10 10:08:08
从 Scala 语言开始,我习惯于在我的代码中添加require语句。我会将它用于永远不应该被违反的事情,它是一种健全性检查,也是代码中的一种“实时评论”。这是我想要的行为// C#if (!(x > 0)) {  throw new Exception($"x must be positive but was ${x}")}但这很难阅读,如果函数顶部有很多它们,那将是一团糟。在 Scala 中,我习惯于这样做:// Scalarequire(x > 0, s"x must be positive but was ${x}")// or justrequire(x > 0)打字并不费力,require(x>0)而且可读性很强。我发现这些在 Scala 中开发时为我节省了很多时间,输入它们非常容易,而且通常健全性检查会很快发现错误。在 C# 中执行此操作的公认方法是什么?我看到有“代码合同”,我尝试使用这些,但它们似乎在 .NET Core 中根本不起作用。
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

代码合同

代码契约允许您在代码中指定前置条件和后置条件。

Contract.Requires(x != null);

Contract.Requires<ArgumentNullException>(x != null, nameof(x));

对于后置条件:

Contract.Ensures(this.F > 0);

Contract.EnsuresOnThrow<T>(this.F > 0);

还有其他变化。查看代码合同命名空间。


查看完整回答
反对 回复 2022-07-10
?
慕仙森

TA贡献1827条经验 获得超7个赞

在方法的开头看到一长串列表是相对标准的if ... throw,但是有Debug.Assert(用于从发布版本中删除的断言)和Trace.Assert(在发布版本中保留断言)方法似乎与 Scalarequire方法非常相似你提到的。

有关它们如何工作和不同重载的详细信息,请参阅MSDN 上有关断言的这篇文章。

在你的情况下,你可以写

Trace.Assert(x > 0, $"x must be positive but was ${x}");


查看完整回答
反对 回复 2022-07-10
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信