我正在尝试将一些代码转换IList为IEnumerable:
[Something(123)]
public IEnumerable<Foo> GetAllFoos()
{
SetupSomething();
DataReader dr = RunSomething();
while (dr.Read())
{
yield return Factory.Create(dr);
}
}
问题是,SetupSomething()来自基类并使用:
Attribute.GetCustomAttribute(
new StackTrace().GetFrame(1).GetMethod(), typeof(Something))
yield最终创建MoveNext(),MoveNext()调用SetupSomething(),并且MoveNext()没有[Something(123)]属性。
我无法更改基类,因此看来我被迫保留IList或IEnumerable手动实现(并将属性添加到MoveNext())。
在这种情况下,有没有其他方法可以使产量起作用?