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

C# 涉及多个值/字符串时的类实例化,c#,C#,当我们编写下面给出的代码(在主控台中)时,我们实际上是在实例化employee类吗?employee类包含序列号、名称的get和set,以及职务和构造函数的列表 List<Employee> employee = new List<Employee>(); employee.Add(new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"})); 您正在调用构造函数,但是employee是一个员工列表 如果不

当我们编写下面给出的代码(在主控台中)时,我们实际上是在实例化employee类吗?employee类包含序列号、名称的get和set,以及职务和构造函数的列表

List<Employee> employee = new List<Employee>();
employee.Add(new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"}));

您正在调用构造函数,但是
employee
是一个员工列表

如果不从列表中获取引用,则无法调用
employee.Name

List<Employee> employee = new List<Employee>();
employee.Add(new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"}));
Employee e1 = employee[0];
List employee=new List();
Add(新雇员(1,“Thomas Alva Edison”,新字符串[]{“Inventor”});
员工e1=员工[0];

就实例化而言,它们是相同的。它们都创建Employee类的一个实例。但它们的不同之处在于,第一个对象的句柄存储在列表的第一项中,而第二个对象的句柄存储在单个对象指针中。这取决于你想用它做什么。如果列表中有更多项目,即处理多个员工的信息,则第一个项目可能有意义,但如果只处理一个员工,则第二个项目可能更有意义。

Code1:

employees.Add(new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"}));
我们实例化employee,不保存对它的引用,而是将它添加到集合中

代码2:

Employee e1 = new Employee(1,"Thomas Alva Edison",new string[]{"Inventor"});
我们以同样的方式实例化employee,但将对它的引用存储在
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<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"})}
};

是的。。。。。它们都在调用同一个构造函数。第二个是将结果存储在
e1
变量中。但第一种方法是将其作为参数传递给
Add
方法。这两种情况下的代码是相同的,因此结果是相同的。将创建一个新的
Employee
实例。该实例的引用存储在何处并不重要,例如在变量
e1
或列表中。每次调用
new
创建一个新的对象实例都会对M.kazem Akhgary和Panagiotis Kanavos产生很大的影响。但直到昨天,我还在想,像第二本书中提到的实例化,我们如何才能添加大量的数据。直到今天我才更好地理解它。现在,如果在添加了几个这样的项之后,调用Employee类中的方法来显示Employee列表中的项,合适的方法是什么。我现在所做的是使用foreach循环遍历员工列表并调用Display方法。是吗?@M.kazem Akhgary@Panagiotis KanavosI我很惊讶。很好的答案。我到目前为止还不明白这一点。谢谢你。你对我这个简单问题的回答极大地提高了我对这方面的认识,而我这些天一直对此一无所知。我没有话要感谢大家。有没有一种方法可以通过编程创建像e1、e2、e3等这样的引用@Unnikrishnan没有,通常你不能动态创建变量。您可以使用
字典
集合。我已经更新了我的答案,以涵盖这个场景。我想不是列表,你是说上面所示的词典会非常好。非常感谢你@Fabjan@Unnikrishnan好的,在简单的场景中,您只需要使用
List
来存储int的范围(例如)可能是一个更好的主意,但是对于类
Person
,您很可能希望将Person映射到它的一个属性(或字段),比如Id、Name或任何其他属性。在这种情况下,
字典
正是您所需要的。虽然初始化需要更多的时间,字典也更复杂,但通过索引访问元素的速度要快得多。谢谢Daniel A.White。
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"})}
};
Employee mike = employees["Mike"];