2011-11-08 42 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