C#で単純な単独リンクリストを実装しようとしているとき、int値でボックス化された2つのオブジェクト型変数を比較すると==
は機能しませんしかし.Equals
が動作します。同じint値でボックス化された2つのオブジェクト型変数を比較する際に==が機能しない理由
なぜそうであるかを確認したいと思っていました。私は交換した場合、しかし、
/// <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;
}
-
以下のスニペットは、以下のコードは、Object型の値の単独リンクリストや検索を横断
public class Node {
/// <summary>
/// Data contained in the node
/// </summary>
private object Data { get; set; };
}
汎用オブジェクト型のデータプロパティです temp.Dataと
temp.Data.Equals(d)
== D
temp.Data
とd
の両方が値 '3'を持っていても機能しなくなります。 ==
がオブジェクト型変数で動作しない理由は何ですか?
は、ここでの主な機能からの抜粋だ - 私はint型の値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);
、それが成功したオブジェクト型として3箱入りただろう。しかし、なぜ==
が機能しないのか分かりませんが、.Equals
はします。
==
演算子は値型のみにオーバーロードされていますか?
ジェネリックを使用する必要があります。 – SLaks
はい、これは練習のためのものです。ジェネリックスは既にLinkedListの実装を持っていることに気づいた – Ankit