2014-10-08 41 views
1

我有一个方法:IEnumerable中的Type参数是什么<T> .Intersect <T>呢?

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

我看到,你可以传递一个类型相交(),所以在第一种情况回线是:

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

怎么会是这样,从不同我的原始代码?

回答

7

显式指定参数类型完全没有区别; source是一个IEnumerable<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; 
    } 
} 
相关问题