亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超8個贊

在方法的開頭看到一長串列表是相對標準的if ... throw,但是有Debug.Assert(用于從發布版本中刪除的斷言)和Trace.Assert(在發布版本中保留斷言)方法似乎與 Scalarequire方法非常相似你提到的。

有關它們如何工作和不同重載的詳細信息,請參閱MSDN 上有關斷言的這篇文章。

在你的情況下,你可以寫

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


查看完整回答
反對 回復 2022-07-10
  • 2 回答
  • 0 關注
  • 176 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號