У меня есть метод:
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();
Как это будет отличаться от моего исходного кода?
Явное указание типа параметра не имеет никакого значения; 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;
}
}