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

と言うことができます。これは私が必要としていたものです。私は 'T:IAceDataObject'の部分が見つかりませんでした。どうもありがとう。 – Neal