Общие расширения - PullRequest
       9

Общие расширения

2 голосов
/ 08 ноября 2011

Я хочу создать набор расширений, аналогичных .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>();

Я не могу понять, как правильно сформировать расширение с помощью шаблонов.

1 Ответ

3 голосов
/ 08 ноября 2011

Я считаю, что это то, что вы ищете.

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; 
}
...