IEnumerable <T> .Intersect <T>中的Type参数是做什么的?

bma*_*ay2 1 c# linq generics types

我有一个方法:

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

我看到你可以将一个类型传递给Intersect(),所以第一个条件中的返回行是:

return source.Intersect<T>(target).Any();
Run Code Online (Sandbox Code Playgroud)

这与我原来的代码会有什么不同?

Rus*_*Cam 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;
    }
}
Run Code Online (Sandbox Code Playgroud)