C#List <string>打印项目

时间:2019-05-28 16:29:20

标签: c# list

这里和后面的PluralSight教程中的c#都是新手。

我有以下文件(我认为是类?)

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Customers
{
    class Program
    {
        static void Main(string[] args)
        {
            CustomerList customers = new CustomerList();

            customers.AddCustomer("Apple");
            customers.AddCustomer("Microsoft");
        }
    }
}

和CustomerList.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Customers
{
    public class CustomerList
    {
        public CustomerList()
        {
            customers = new List<string>();
        }

        public void AddCustomer(string customer)
        {
            customers.Add(customer);
        }

        private List<String> customers;
    }
}

我遇到的障碍是我只想列出列表中的项目,而这样做让我很沮丧。我确实尝试使用如下的foreach语句。

      foreach (string customer in customers)
        {
            Console.WriteLine(customer);
        }

来自Program.cs,但我无法这样做

foreach语句无法对类型'CustomerList'的变量进行操作,因为'CustomerList'不包含'GetEnumerator'的公共实例定义

但是,如果我将所有代码都保存在Program.cs中并使用以下代码,则我可以写出列表中的每个项目。

private List<string> customers;

static void Main(string[] args)
{
    customers = new List<String>();
    AddCustomers(customers);

    foreach(string customer in customers) {

         Console.WriteLine(customer);
    }


}

private void AddCustomers(List<string> customers)
    {
        customers.Add("Apple");
        customers.Add("Microsoft");
    }

就像我说的那样,很新,所以请一个人来吧。

2 个答案:

答案 0 :(得分:3)

尝试在IEnumerable类中实现CustomerList接口。这样,您必须添加方法GetEnumerator(),这将允许您遍历字符串列表。实现如下所示的接口(注意类定义中的: IEnumerable):

public class CustomerList : IEnumerable 
{
    ... // Your current code \\ ...

    public IEnumerator GetEnumerator()
    {
        return customers.GetEnumerator();
    }
}

答案 1 :(得分:2)

您需要首先检查您的 CustomList 定义和实例 customers 。实例客户不是集合,因此不能按照错误描述中的说明进行枚举。而是它是CustomerList的一个实例,它具有一个名为customer的属性。

属性 customer 是字符串的集合,可以枚举,但是在您的情况下,您已将其声明为私有。

因此,您需要做的第一个更改是使其成为公共财产。请注意,我没有将变量设为public,而是将其设为Public Property。您可以了解有关属性here

的更多信息
public List<String> customers {get;set;}

然后,在您的foreach中,您可以执行以下操作。

foreach (string customer in customers.customers)
{
    Console.WriteLine(customer);
}

但这是使现有代码正常工作可能需要的更改。但是,如果要重写整个代码,则有两个选择。

a)可以取消CustomerList类,直接使用List。

var customers = new List<string>();
customers.Add("Apple");

b)使用CustomerList类,但使用公共属性“客户”将其直接添加到列表中

public class CustomerList
{
    public CustomerList()
    {
        customers = new List<string>();
    }

    public List<String> Customers;
}

客户代码

CustomerList customers = new CustomerList();

customers.Customers.Add("Apple");
customers.Customers.Add("Microsoft");

c)第三种选择是实现IEnumerable接口,但是,考虑到您的代码要求以及您仍在学习C#的事实,我想这可能是一个过大的选择。在您真正开始IEnumerable实现之前,最好先对集合和类/属性有一个深刻的了解