List.AsEnumerable在foreach循环中

时间:2014-07-18 16:03:38

标签: c#

假设我有一个类和这样的接口:

public interface IClassA
{
   IEnumerable<object> MyStuff { get; }
}

public class ClassA : IClassA
{
   public List<object> MyStuffList { get; set; }
   public IEnumerable<object> MyStuff { get { return MyStuffList.AsEnumerable(); } }
}

现在,如果以后,我有一些ClassA的实例包含在IClassA的某个地方,我想在IClassA的MyStuff上做一个foreach:

public void DoStuff(IClassA param)
{
   foreach(var x in param.MyStuff)
   {
      Debug.WriteLine(x.ToString());
   }
}

MyStuffList.AsEnumerable()是否在循环的每次迭代中被调用,或者在循环开始时只解析一次?我的直觉告诉我它是后者,因为重新调用.AsEnumerable会使foreach循环的枚举器/迭代器/无效。基本上,我只是希望能够通过接口公开严格的只读集合,并能够在适当的情况下在幕后操作集合。这是一个体面的方式吗?

0 个答案:

没有答案