当我们编写类似下面给出的代码(在控制台Main中)时,我们实际上是在实例化员工类吗? employee类包含序列号,名称的get和set,以及作业标题和构造函数的List。
List<Employee> employee = new List<Employee>();
employee.Add(new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"}));
我的问题就像下面的基本实例一样。
Employee e1=new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"}))
答案 0 :(得分:7)
Code1:
employees.Add(new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"}));
我们实例化员工,不保存对它的引用,而是将其添加到集合中。
Code2:
Employee e1 = new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"});
我们以相同的方式实例化员工,但在e1
变量中存储对其的引用。
使用code2,您仍然可以通过引用将其添加到集合中:
employees.Add(e1);
您还可以通过索引或使用LINQ:
访问列表中的对象var e = employees[0];
var e = employees.First();
也可以使用集合初始化程序用值填充集合:
List<Employee> employees = new List<Employee>()
{
new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"})),
new Employee(2,"Kazem Zooo Benson",new string[]{"Inventor"})),
new Employee(3,"Mike Oslo Jameson",new string[]{"Inventor"}))
};
有时使用Dictionary<TKey, TValue>
集合而不是List<T>
更方便。
我们假设我们正在使用上一个示例中的List<Employee>
,我们希望只获得名字为“Mike”的员工。
使用List<T>
,我们必须使用LINQ
或foreach
来迭代整个集合,以找到我们要查找的内容:
Employee mike = employees.First(e => e.Name.StartsWith("Mike"));
所以这很麻烦。我们可以使用字典将名称存储为键:
Dictionary<string, Employee> employees = new Dictionary<string, Employee>()
{
{"Thomas", new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"})},
{"Kazem", new Employee(2,"Kazem Zooo Benson",new string[]{"Inventor"})},
{"Mike", new Employee(3,"Mike Oslo Jameson",new string[]{"Inventor"})}
};
在这种情况下,如果我们想要获得名为Mike的人,我们只需要访问我们字典的键:
Employee mike = employees["Mike"];
答案 1 :(得分:5)
就实例而言,它们是相同的。它们都创建了Employee类的一个实例。但它们的不同之处在于第一个的对象句柄存储在列表的第一项中,而第二个的句柄存储在单个对象指针中。只是取决于你想用它做什么。如果你要在列表中有更多的项目,即处理多个员工的信息,那么第一个可能有意义,但如果你只是要处理一个员工,那么第二个可能更有意义。
答案 2 :(得分:4)
您正在调用构造函数,但employee
是员工列表。
如果没有从列表中获取引用,您就无法调用employee.Name
。
List<Employee> employee = new List<Employee>();
employee.Add(new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"}));
Employee e1 = employee[0];