在C#中嘗試實現一個簡單的單向鏈表時,我注意到==
在比較兩個用int值裝箱的對象類型變量時不起作用但.Equals
的作品。爲什麼在比較兩個使用相同int值的對象類型變量時,==不起作用
想要檢查爲什麼是這樣。
以下代碼段是一個通用的對象類型的數據屬性
public class Node {
/// <summary>
/// Data contained in the node
/// </summary>
private object Data { get; set; };
}
下面的代碼遍歷類型對象的值的單向鏈表和搜索 -
/// <summary>
/// <param name="d">Data to be searched in all the nodes of a singly linked list
/// Traverses through each node of a singly linked list and searches for an element
/// <returns>Node if the searched element exists else null </returns>
public Node Search(object d)
{
Node temp = head;
while (temp != null)
{
if (temp.Data.Equals(d))
{
return temp;
}
temp = temp.Next;
}
return null;
}
但是,如果我更換
temp.Data.Equals(d)
與 temp.Data == d
它停止工作,即使temp.Data
和d
都具有值'3'。 ==
不適用於對象類型變量的任何原因?
下面是來自主要功能的片段 -
SinglyLinkedList list = new SinglyLinkedList();
list.Insert(1);
list.Insert(2);
list.Insert(3);
list.Insert(4);
list.Insert(5);
list.Print();
Node mid = list.Search(3);
我相信,因爲我傳遞一個int值3
和搜索方法需要一個對象類型,它已成功地將盒裝3作爲對象類型。然而,不知道爲什麼==
不起作用,但.Equals
呢。
是==
運算符僅爲值類型重載?
您應該使用泛型。 – SLaks
是的,這只是爲了實踐目的。我意識到泛型將已經有一個LinkedList實現 – Ankit