2014-10-08 40 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; 
    } 
} 
相關問題