【发布时间】:2010-04-07 17:29:06
【问题描述】:
我正在尝试将一些代码从 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())。
在这种情况下,还有其他方法可以让 yield 工作吗?
【问题讨论】:
标签: c# reflection attributes yield