假设我有一个类和这样的接口:
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循环的枚举器/迭代器/无效。基本上,我只是希望能够通过接口公开严格的只读集合,并能够在适当的情况下在幕后操作集合。这是一个体面的方式吗?