我在幾個使用if(Is.NotNull(SomeObject))而不是if(SomeObject!= null)的項目中遇到了一些代碼。這兩種方法有什麼區別嗎?什麼時候會使用某種特定的方法,還是隻是一種風格選擇?Is.NotNull和!= null之間的區別
回答
我看過Is.Not.Null
作爲NUnit的一部分,以及來自Rhino.Mocks的Is.NotNull
。
通常功能不會有任何不同 - Is.NotNull
的缺點只是爲了更「流利地」表達您的單元測試,或者自然地表達。關於測試的可讀性已經有很多討論,流暢的語法背後的想法是,當你從左到右閱讀時,它會形成一個描述代碼行正在做什麼的句子。
您示例中的Is
類型不是我之前在基類庫中見過的類型。這聽起來像是某人在貴公司或其他地方寫的東西,或許是「流利」圖書館的一部分。
還有可以會有細微的差別,如果SomeObject
表達式的編譯時間類型已經重載!=。我希望希望儘管如此,假設一切都已經得到合理實施,那麼它最終不會有什麼區別。
雖然很難確切地知道這裏發生了什麼,因爲Is.NotNull
不是基本類庫的一部分,據我所知...這些項目是否使用其他實用程序庫?這些是在單元測試還是生產代碼?
啊,你說得對,它不是基類庫的一部分,它是我們在這裏定製的外部程序集的一部分。該方法是在System名稱空間中的一個名爲「Is」的類中實現的,因此導致它認爲它是BCL的一部分。謝謝你的幫助! – tbreffni 2009-10-09 14:45:00
例如,您可能需要查看Is.NotNull(),看它是否在對象的內部查找以確定是否設置了任何值。
這可能是一個對象由於更多的原因被認爲是空的,而實際上是空的(或未設置)對象值。這可能是因爲如果某些屬性未設置必須設置,那麼它也將被視爲空。
可能有區別。如果SomeObject有一個等號/不等於超載可能就不會被稱爲出於同樣的原因這兩個語句是不同的:
if(x == null) ...
- 或 -
if(((object)x) == null) ...
後者將使用引用相等,而前者可能會使用操作員超載。
- 1. null == x和x == null之間的區別?
- 2. PHP中NULL和null之間的區別
- 3. != null和!== null之間有什麼區別?
- 4. mySlickgrid.destroy()和mySlickgrid之間的區別= null
- 5. YAML中nil和null之間的區別
- 6. DBNull.Value和null之間的真正區別?
- 7. MySQL之間的區別是NOT NULL和!= ''
- 8. Objective-C(null)和nil之間的區別
- 9. 更新與NULL和''之間的區別?
- 10. connection.close()和connection之間的區別= null
- 11. undefined和null之間有什麼區別?
- 12. DML中的NULL和NULL(「」)之間的區別
- 13. java swing中setText(null /「」)之間的區別?
- 14. 什麼是Object.Equals(obj,null)和obj == null之間的區別
- 15. null ==對象和對象== null之間的區別
- 16. MySQL中的「!= NULL」和「IS NOT NULL」之間是否有區別?
- 17. SSRS中的Null,(Null)和Nothing之間是否有區別?
- 18. 這些(bCondition == NULL)和(NULL == bCondition)之間有什麼區別?
- 19. 「not null」和「not null enable」之間有區別嗎?
- 20. a == null和a === null之間有什麼區別?
- 21. 之間的〜/和的區別../
- 22. '#','%'和'$'之間的區別
- 23. {!!之間的區別!!}和{{}}
- 24. '+ ='和'= +'之間的區別?
- 25. 「。+」和「。+?」之間的區別
- 26. .eq之間的區別。和==
- 27. #。/和#之間的區別。 ./
- 28. !=和!之間的區別==
- 29. 「%〜dp0」和「。\」之間的區別?
- 30. | =和^ = css之間的區別
有趣...我懷疑這是它創建的原因,但也許它不應該放在System命名空間中。感謝您的洞察力。 – tbreffni 2009-10-09 14:49:01
我同意...... NUnit版本非常煩人。如果你一起使用NUnit和Rhino,它就不得不完全限定一切。 – womp 2009-10-09 15:47:08