Как делает OfType <T> () Работа?

Как делает 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() это, это быстро.

8
задан Community 23 May 2017 в 12:34
поделиться

2 ответа

Ваша текущая реализация - по замыслу - не поддерживает типы значений.

Если вам нужно что-то похожее на метод LINQ OfType , который поддерживает все типы, попробуйте следующее:

public IEnumerable<TResult> OfType<TResult>(IEnumerable source)
{
    foreach (object item in source)
    {
        if (item is TResult)
            yield return (TResult)item;
    }
}
11
ответ дан 5 December 2019 в 15:20
поделиться

Мне кажется, что это хорошая реализация, но это похоже на конкретную реализацию (вы имеете в виду this.InnerList). Если вы создали метод расширения (который поддерживается в 2.0, не так ли?), Который расширяет IEnumerable, вы сможете использовать его в любой перечисляемой коллекции, не так ли?

0
ответ дан 5 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: