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

时间:2014-10-08 02:20:28

标签: 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;
    }
}

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

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

与原始代码有什么不同?

1 个答案:

答案 0 :(得分:7)

明确指定参数类型完全没有区别; sourceIEnumerable<T>Intersect<T>()需要IEnumerable<T>,因此编译器需要parameter type can be inferred,而不需要明确定义它。

如果您愿意,您当然可以包含参数类型,但有时这会使代码噪音更大/更难阅读。如果您要明确所有参数类型,则该方法看起来像

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;
    }
}