2011-11-08 72 views
2

我想創建一個類似於.ToList <>()的擴展,用於我自定義的通用收集。通用擴展

這裏是我的對象有

AceDataObjectCollection<T> : ICollection<T> where T : IAceDataObject 
IAceDataBlock : IAceDataObject 
IAceMessage : IAceDataObject 

我想這樣做。

AceDataObjectCollection<IAceDataObject> objects = new AceDataObjectCollection<IAceDataObject>(); 
objects.Add(...) // Add different data objects here 
AceDataObjectCollection<IAceMessage> messages = objects.Where(o => o is IAceMessage).ToAceDataObjectCollection<IAceMessage>(); 

我似乎無法弄清楚如何用泛型適當地形成擴展。

+2

稍微偏離主題,但您可能對'OfType' LINQ方法感興趣。所以,而不是你的'Where'調用,你可以說'.OfType ()' – StriplingWarrior

回答

3

我相信這就是你要找的。

public static AceDataObjectCollection<T> ToAceDataObjectCollection<T>(this IEnumerable<T> col) where T : IAceDataObject 
{  
    AceDataObjectCollection<T> objects = new AceDataObjectCollection<T>(); 

    foreach (T item in col) 
     objects.Add(item); 

    return objects; 
} 
+0

這確切是我需要的。我錯過了'Where T:IAceDataObject'部分。非常感謝。 – Neal