您好我要说明我的代码中没有任何错误,我只是在这里问一个非常基本的问题。相关列表集合类让我看到我有一个名为customer的类
class customer
{
public int Id { get; set; }
public string Name { get; set; }
public int Salary { get; set; }
}
在我的main方法中,我创建了一个客户数组并初始化了我的客户类中存在的那些属性
static void Main(string[] args)
{
customer[] customers = new customer[3];
customers[0] = new customer
{
Id = 1,
Name = "A",
Salary = 30000
};
customers[1]=new customer
{
Id = 2,
Name = " B",
Salary = 50000
};
customers[2] = new customer
{
Id = 3,
Name = "C",
Salary = 90000
};
List<customer> Cust= new List<customer>(2);
Cust.Add(customers[0]);
Cust.Add(customers[1]);
Cust.Add(customers[2]);
for (int i = 0; i < Cust.Count; i++)
{
customer C = Cust[i];
Console.WriteLine("Id = {0} & Name = {1} & Salary = {2}",C.Id,C.Name,C.Salary);
}
Console.ReadLine();
}
好!所以这段代码工作得非常好,但我的问题是,最后我们创建了一个名为 cust 的列表,并将所有的custemers添加到其中,那么为什么有必要创建另一个类型为customer的对象正如我在for循环中做的那样
customer C = Cust[i];
为什么我不能像这样调用我的代码
console.WriteLine{Cust[i]}
据我所知,当我们创建类的对象时,我们可以使用该实例变量轻松访问该类中的代码。那么为什么不在这里?
答案 0 :(得分:3)
在for循环中,您不是创建新客户,而只是创建对现有客户的引用:
for (int i = 0; i < Cust.Count; i++)
{
customer C = Cust[i]; //<- not new, just a reference to the customer at index
Console.WriteLine("Id = {0} & Name = {1} & Salary = {2}",C.Id,C.Name,C.Salary);
}
循环的一种更简洁的方法是使用foreach而不是for(注意:使用C#6.0字符串插值):
foreach(var c in Cust)
Console.WriteLine($"Id = {c.Id} & Name = {c.Name} & Salary = {c.Salary}");
答案 1 :(得分:0)
要执行您要求执行的操作,您首先需要覆盖类上的ToString()
方法。 ToString()
方法将隐式调用Console.WriteLine
方法:
class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public int Salary { get; set; }
public override string ToString()
{
return string.Format("Id = {0} & Name = {1} & Salary = {2}", Id, Name, Salary);
}
}
现在您有一种默认的方式将客户表示为字符串,您可以完全按照要求执行操作:
for (int i = 0; i < Cust.Count; i++)
{
Console.WriteLine(Cust[i]);
}
而且,既然你有这个,你可以用更简单的方式做到这一点。以下内容将隐含地将每个项目传递给Console.WriteLine()
,这将调用项目的ToString()
方法:
customers.ForEach(Console.WriteLine);
如果由于某种原因你不想覆盖ToString
方法,你仍然可以使用索引访问实例属性而不创建新对象,如下所示:
for (int i = 0; i < Cust.Count; i++)
{
Console.WriteLine("Id = {0} & Name = {1} & Salary = {2}",
Cust[i].Id, Cust[i].Name, Cust[i].Salary);
}