列表集合类

时间:2017-05-08 20:49:01

标签: c#

您好我要说明我的代码中没有任何错误,我只是在这里问一个非常基本的问题。相关列表集合类让我看到我有一个名为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]}

据我所知,当我们创建类的对象时,我们可以使用该实例变量轻松访问该类中的代码。那么为什么不在这里?

2 个答案:

答案 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);
}