C#中判断对象是否是同一个实例
C#如下,怎么判断对象cc与jeffry 、 tom是不是同一个对象?
class Student
{
public int Id { get; set; }
public string Name { get; set;}
}
internal class Program
{
static void Main(string[] args)
{
Queue<Student> queue = new Queue<Student>();
var tom = new Student() { Id = 1, Name = "Tom" };
var jeffry = new Student() { Id = 2, Name = "Jeffry" };
queue.Enqueue(tom);
queue.Enqueue(jeffry);
var cc = queue.Peek();
Console.WriteLine("cc is jeffry: " + cc.Equals(jeffry));
Console.WriteLine("cc is tom: " + cc.Equals(tom));
Console.ReadLine();
}
}
输出结果:

在C#中判断对象是否是同一个实例(即引用相同),可用通过下面三种方式实现:
1. 使用 ReferenceEquals 方法(推荐)
bool isSameAsTom = object.ReferenceEquals(cc, tom); // true(因为cc是tom的引用)
bool isSameAsJeffry = object.ReferenceEquals(cc, jeffry); // false
2. 使用 == 运算符
bool isSameAsTom = (cc == tom); // true
bool isSameAsJeffry = (cc == jeffry); // false
3. 使用 Equals 方法(需注意重写行为)
bool isSameAsTom = cc.Equals(tom); // true(默认比较引用)
bool isSameAsJeffry = cc.Equals(jeffry); // false
在您的代码中验证:
var cc = queue.Peek(); // 这里cc实际指向tom(第一个入队的对象)
Console.WriteLine(object.ReferenceEquals(cc, tom)); // 输出 True
Console.WriteLine(object.ReferenceEquals(cc, jeffry)); // 输出 False
Console.WriteLine(cc == tom); // 输出 True
Console.WriteLine(cc == jeffry); // 输出 False
关键说明:
-
Peek()的行为
queue.Peek()返回队列中第一个元素(最早入队的对象),这里是tom,所以cc和tom是同一个引用。 -
引用比较 vs 值比较
- 上述方法比较的是内存地址(是否同一个实例)
- 如果重写了
Equals()或==运算符,结果可能不同(但您的Studnet类未重写)
-
类名拼写修正建议
将Studnet改为Student避免混淆:class Student // 修正拼写 { public int Id { get; set; } public string Name { get; set; } }
最终结论:
在您的代码中,cc 和 tom 是同一个对象,与 jeffry 不是同一个对象。

浙公网安备 33010602011771号