涉及多个值/字符串时的类实例化

时间:2015-11-04 15:39:31

标签: c#

当我们编写类似下面给出的代码(在控制台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"}))

3 个答案:

答案 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>,我们必须使用LINQforeach来迭代整个集合,以找到我们要查找的内容:

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];
相关问题