是否可以拋出一個異常來獲得[pure]屬性?[pure]函數是否可以拋出異常?
2
A
回答
2
根據
https://msdn.microsoft.com/en-us/library/system.diagnostics.contracts.pureattribute(v=vs.110).aspx
PureAttribute
屬性
表示一個類型或方法是純的,也就是說,它不作任何 可見狀態變化。
所以很有可能從這種方法拋出異常,例如,
// factorial is a pure function: no state will be changed,
// just a computation
[Pure]
public static BigInteger Factorial(BigInteger value) {
// We can't return infinity with BigInteger and that's why have to throw the exception
if (value < 0)
throw new ArgumentOutOfRangeException("value", "value must be non-negative");
...
}
而如果我把這種純粹的方法
BigInteger result = Factorial(1000000000);
可能的結果之一是OutOfMemory
拋出異常
-2
我與梅德同意。
據MSDN文檔:
被稱爲合同內必須是純的所有方法;也就是說,他們不得更新任何先前存在的狀態。允許純方法修改在進入純方法後創建的對象。
允許拋出異常,並不一定被視爲改變對象狀態。
1
你可以拋出異常,你沒有做任何可見的狀態改變。這裏的例子從Reference source。
[Pure]
private void VerifyWritable() {
if (isReadOnly) {
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
}
Contract.EndContractBlock();
}
相關問題
- 1. $ mdDialog.prompt會拋出異常,但該函數可以正常工作
- 2. std :: map函數總是拋出異常
- 3. Java:可以拋出異常拋出異常嗎?
- 4. 是否可以從單個線程拋出StaleStateObjectException異常?
- 5. 使用Mockito是否可以拋出抽象異常?
- 6. 拋出異常時是否可以自動進入調試器?
- 7. 嵌套線程是否可以爲父線程拋出異常?
- 8. 線程是否可以拋出多個ThreadAbortException異常?
- 9. 是否彈出拋出異常?
- 10. 可以拋出一個對象的構造函數拋出異常嗎?
- 11. 如何測試函數是否不拋出異常?
- 12. 如何檢查函數是否在c#中拋出異常?
- 13. 構造函數拋出異常後可以調用finalize嗎?
- 14. WebDriver FluentWait - 函數/謂詞可以拋出異常嗎?
- 15. 如何創建可以拋出異常的通用函數?
- 16. 構造函數可以拋出運行時異常嗎?
- 17. 是否可以拋出MessageQueueException?
- 18. 是否可以拋出java.lang.Error?
- 19. Java JUnit - 是否可以確定是否拋出了哪個異常?
- 20. PHP:是否有可能在異常拋出中調用公共類函數?
- 21. Java - 檢查是否parseInt拋出異常
- 22. 從CoerceValueCallback拋出異常是否合適
- 23. 確定CoreApplicationView.GetCurrentView()是否會拋出異常?
- 24. 迭代DirectoryInfo.EnumerateFiles是否會拋出異常?
- 25. boost :: weak_ptr是否會拋出異常?
- 26. 哪裏可以拋出異常句柄?
- 27. 運行時異常可以被拋出?
- 28. 我可以從_CrtSetReportHook拋出異常嗎?
- 29. XmlSerializer可以拋出哪些異常?
- 30. 發出Qt信號時是否有可能拋出異常?
你應該upvote而不是添加其他答案。 –
爲什麼?我的回答並不是指同一篇文章?另一種信息可以從我的答案中找到。你不應該把它投下來。 – Diemauerdk