c#当我尝试在我的列表<string>中的console.write元素时,如何修复foreach

Sha*_*ToD 2 c# foreach list

我正在学习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)

Ren*_*ogt 5

在线

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)

  • 因为支持字段`workers`是`List <string>`类型,我建议至少返回`IReadOnlyList <String>`而不是`IEnumerable <string>` (2认同)