我正在学习c#,我的代码有问题.我不知道为什么我不能在我的例子中使用foreach.我该怎么做才能解决这个问题?有什么建议?
public class Company
{
List<string> workers;
public Company()
{
workers= new List<string>();
}
public void AddWorker(string x)
{
workers.Add(x);
}
}
static void Main(string[] args)
{
Company c1= new Company();
c1.AddWorker("Adam Snow");
c1.AddWorker("John Big");
c1.AddWorker("Chris Zen");
foreach (var x in c1)
{
Console.WriteLine(x);
}
}
Run Code Online (Sandbox Code Playgroud)
在线
foreach (var x in c1)
Run Code Online (Sandbox Code Playgroud)
你试图迭代你的实例Company
不可枚举.您想迭代workers
该实例的列表.
一个解决方案是建立workers
一个公共财产:
public class Company
{
List<string> workers;
public IEnumerable<string> Workers { get { return workers; } }
// shortened for brevity
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以这样使用foreach
:
foreach (var x in c1.Workers) // <- access the Workers property here
{
Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)
正如Dmitry建议的那样,您可能只希望将worker列表公开为readonly,以便该类的用户无法从外部更改列表的内容:
public class Company
{
List<string> workers;
public IReadOnlyCollection<string> Workers
{
get { return workers.AsReadOnly(); }
}
// shortened for brevity
}
Run Code Online (Sandbox Code Playgroud)