Что делает параметр Type в IEnumerable <T> .Intersect <T>?

1

У меня есть метод:

public static bool ItemsIntersectOrFirstIsEmpty<T>(IEnumerable<T> source, IEnumerable<T> target)
{
    if (source.Any())
    {
        return source.Intersect(target).Any();
    }
    else
    {
        return true;
    }
}

Я вижу, что вы можете передать тип в Intersect(), поэтому возвращаемая строка в первом условии будет:

return source.Intersect<T>(target).Any();

Как это будет отличаться от моего исходного кода?

Теги:
linq
generics
types

1 ответ

7
Лучший ответ

Явное указание типа параметра не имеет никакого значения; source - это IEnumerable<T> а Intersect<T>() принимает IEnumerable<T>, поэтому тип параметра может быть выведен компилятором без необходимости его явного определения.

Вы можете, конечно, включить тип параметра, если хотите, но иногда это может сделать код более шумным/трудным для чтения. Если бы вы были явно о всех типах параметров, метод выглядел бы как

public static bool ItemsIntersectOrFirstIsEmpty<T>(IEnumerable<T> source, IEnumerable<T> target)
{
    if (source.Any<T>())
    {
        return source.Intersect<T>(target).Any<T>();
    }
    else
    {
        return true;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню