Как делает OfType () Работа?
Я прочитал эту ссылку о том, что продолжается, но как точно делает поставщика LINQ, знают, как получить все объекты, соответствующие указанному типу. Я знаю IQueryable
"цепочки" запрашивают и затем оценивают когда GetEnumerator()
назван (право?).
Конкретно я хочу знать, как платформа быстро делает сравнение типов? Я записал метод в.NET 2,0 проекта, которые пошли как это (так как 2.0 не поддерживает подобные функции):
public IEnumerable OfType()
where TResult : class
{
foreach (TItem item in this.InnerList)
{
TResult matchItem = item as TResult;
if (matchItem != null)
{
yield return matchItem;
}
}
}
Действительно ли это - лучшая реализация?
Править: Мое основное беспокойство с этим OfType
это, это быстро.
Ваша текущая реализация - по замыслу - не поддерживает типы значений.
Если вам нужно что-то похожее на метод LINQ OfType
, который поддерживает все типы, попробуйте следующее:
public IEnumerable<TResult> OfType<TResult>(IEnumerable source)
{
foreach (object item in source)
{
if (item is TResult)
yield return (TResult)item;
}
}
Мне кажется, что это хорошая реализация, но это похоже на конкретную реализацию (вы имеете в виду this.InnerList). Если вы создали метод расширения (который поддерживается в 2.0, не так ли?), Который расширяет IEnumerable, вы сможете использовать его в любой перечисляемой коллекции, не так ли?