Я делаю слой типа AOP, и я хотел бы вернуть блок итератора для общей коллекции (например, что-то вроде «IEnumerable»). Однако тип T динамически обнаруживается. Я могу найти этот тип и иметь его локально как переменную «Тип», но как я могу выйти за рамки этого и вернуть блок итератора для этого динамически обнаруженного типа?Как создать динамически типизированный блок итератора C#?
То, что я хочу, это что-то вроде этого (как можно ближе, как я могу выразить это в обычном C#):
public IEnumerator<runtimeDiscoveredType> EntryIteratorBlock(Type desiredElementType)
{
// One can assume that desireElementType is the same as (or convertible to) runtimeDiscoveredType
TypeConverter tc = new TypeConverter()
var actualItem = ....; // some code goes here to pick up the actual item from
... // some collection.
if (ChooseThisItem(actualItem))
yield return tc.ConvertTo(actualItem, desiredElementType);
else
yield break;
}
Я хотел бы затем вернуть EntryIteratorBlock, так что я могу динамически переборе коллекции. (Элементы в коллекции дороги для загрузки, и поэтому я хочу загрузить их лениво.)
Я согласен с Питером; более конкретный пример упростит, если я напишу о том, что вы пытаетесь сделать. – Gabe 2010-11-23 07:00:05