List<Employee> staff = new List<Employee>();
Employee newHire = new Employee("John Smith", "1101");
staff.Add(newHire);
if (staff.Contains(newHire))
Console.WriteLine("Yes the list contains the item we just added\n\t{0}", newHire.ToString());
newHire = new Employee("John Smith", "1101");
if (staff.Contains(newHire))
Console.WriteLine("The list also contains this Employee");
else
Console.WriteLine("Nope, can't find John Smith");
该代码用于解释Contains()
的用法,但我对
实例newHire。似乎我们两次创建了此实例,但我不知道它们之间有什么区别。
我是C#的新手,英语不是我的母语。
答案 0 :(得分:4)
这是发生了什么:
首先,您创建一个空列表和一个Employee
类型的对象
List<Employee> staff = new List<Employee>();
Employee newHire = new Employee("John Smith", "1101");
我们现在在记忆中
newHire->指向地址0x00000001 //变量内容的地址示例
然后我们将其放在列表中
staff.Add(newHire);
内存
newHire->指向地址0x00000001
人员(0)->指向地址0x00000001
以下代码有效,因为两个地址相同
if (staff.Contains(newHire))
Console.WriteLine("Yes the list contains the item we just added\n\t{0}", newHire.ToString());
现在这个小把戏
newHire = new Employee("John Smith", "1101");
这将创建一个Employee类型的新对象,其信息与第一个对象完全相同。 但这是一个新的
所以现在我们已经有了记忆
newHire->指向地址0x00000004 //已将新地址分配给新对象
人员(0)->指向地址0x00000001
以下表示“ 人员是否包含存储在地址0x00000004的对象?”
if (staff.Contains(newHire))
Console.WriteLine("The list also contains this Employee");
else
Console.WriteLine("Nope, can't find John Smith");
当然,答案是否定的,列表仍然在0x00000001处保留对该对象的引用
答案 1 :(得分:2)
覆盖用于比较Equals
个对象的Employe
方法
public class Employee
{
public string Name { get; set; }
public string ID { get; set; }
public Employee(string name, string id)
{
ID = id;
Name = name;
}
public override bool Equals(object obj)
{
Employee item = obj as Employee;
if (item == null)
{
return false;
}
return this.ID == item.ID && this.Name == item.Name;
}
}
答案 2 :(得分:1)
newHire是一个变量,一个放置事物的地方。定义时会创建此空白空间:
Employee newHire
您使用'new'关键字创建Employee对象
new Employee("John Smith", "1101");
因此,这一行要做三件事,它创建了Employee,定义了一个变量来保存它,并将Employee分配给该变量。
Employee newHire = new Employee("John Smith", "1101");
然后几行后,将创建另一个Employee对象(具有相同的数据)并将其放置在同一变量中。
newHire = new Employee("John Smith", "1101");
答案 3 :(得分:0)
newHire只是一个对象变量。
它第一次引用雇员John Smith。然后将其添加到列表中。
然后,您再次将Employee John Smith分配为新对象。 一旦这样做,对第一个对象的引用就会丢失。
现在,第一个员工对象在列表内。第二个员工不在员工列表中,但由相同的newHire变量引用