There is some code that I’m trying to convert from IList to IEnumerable:
[Something(123)]
public IEnumerable<Foo> GetAllFoos()
{
SetupSomething();
DataReader dr = RunSomething();
while (dr.Read())
{
yield return Factory.Create(dr);
}
}
The problem is, SetupSomething() comes from the base class and uses:
Attribute.GetCustomAttribute(
new StackTrace().GetFrame(1).GetMethod(), typeof(Something))
yield ends up creating MoveNext(), MoveNext() calls SetupSomething(), and MoveNext() does not have the [Something(123)] attribute.
I can’t change the base class, so it appears I am forced to stay with IList or implement IEnumerable manually (and add the attribute to MoveNext()).
Is there any other way to make yield work in this scenario?
You can wrap the method in another method that does all required preprocessing: