这里和后面的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");
}
就像我说的那样,很新,所以请一个人来吧。
答案 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实现之前,最好先对集合和类/属性有一个深刻的了解