Q
爲空參數
9
A
回答
9
爲IComparable.CompareTo()
和IComparable<T>.CompareTo()
狀態這兩種MSDN引用以下:
根據定義,任何物體進行比較大於(或如下)
Nothing
,以及兩個空引用比較彼此相等。
在VB Nothing
對應於null
在C#。
注意,前一段狀態:
比較的意思,「小於」,「等於」和「大於」,取決於具體的實施。
但是不是null的實例引用總是大於空引用,無論你如何比較類的實例。
12
我看到的MSDN文檔,但它沒有任何關於這個問題
是它確實說了,但不是很清楚。該文檔指出:
根據定義,任何對象比較大於(或跟隨)無,並且兩個空引用相互比較相等。
該文檔令人困惑,因爲它混合了C#(null)和VB(Nothing)中的成語在同一句中。我會把它提到文檔管理器。
注意,規則同樣適用於空值類型。如果要排序可空整數列表,說出來的話1被認爲是比空排序的目的更大。小心;這不是在C#中默認比較可空的整數的方式。
5
確保使用Object.ReferenceEquals來測試傳遞給CompareTo的參數是否爲null。避免使用==和!=運營商的CompareTo方法,因爲有人可能實際上按照MSDN建議委派的經營者回CompareTo方法,這反過來會創造在一眨眼的功夫無限循環和堆棧溢出(!)。
這裏是一個模型,你會如何嘗試實現CompareTo方法:
public class Piano : IComparable<Piano>
{
public float Mark { get; set; }
public int CompareTo(Piano other)
{
// The very basic implementation of CompareTo
if (object.ReferenceEquals(other, null))
return 1; // All instances are greater than null
return Mark.CompareTo(other.Mark);
}
}
與this地址說明整個源代碼。
相關問題
- 1. 參數不爲空
- 2. CliBuilder參數爲空
- 3. AJAX函數參數爲空?
- 4. java.lang.NullPointerException:參數錯誤:參數鍵爲空
- 5. P4觸發器,%參數%參數爲空
- 6. 參數爲空,而從angularjs
- 7. 之後的參數爲空
- 8. Json的參數爲空
- 9. 方法參數爲空
- 10. Web服務參數爲空
- 11. MVC路由參數爲空
- 12. WCF參數值爲空
- 13. Python - 如果參數爲空
- 14. 命令行參數爲空
- 15. Geocortex「必需的參數爲空或空」
- 16. 如何轉換參數「空」爲空
- 17. 爲什麼auth_key參數爲空?
- 18. 爲什麼參數變量爲空?
- 19. Ajax成功函數參數爲空?
- 20. LINQ空參數
- 21. 空參數
- 22. python空參數
- 23. 空reportviewer參數
- 24. 在sql server 2008中檢查參數爲空或不爲空?
- 25. 參數'名稱'不能爲空,空或只包含空格
- 26. web api動作參數將空字符串參數轉換爲空
- 27. 如何在struts2接受參數時將空參數轉換爲空
- 28. 在空格中傳遞一個空格作爲函數參數
- 29. 參數是丟失或爲空值:類
- 30. 可爲空的int參數ExecuteNonQuery
請注意,如果您單擊http://msdn.microsoft.com/en-us/library/system.icomparable.compareto.aspx頁上的語法下的C#選項卡,則文本將更改爲「...比較大於(或接着)爲空,以及兩個空引用......「 – phoog 2011-12-27 16:20:41
@phoog:很好!我沒有注意到這一點。 – 2011-12-27 16:28:50