C# 泛型扩展

C# 泛型扩展,c#,.net,extension-methods,C#,.net,Extension Methods,我想为我拥有的自定义泛型集合创建一组类似于.ToList()的扩展 这是我的物品 AceDataObjectCollection<T> : ICollection<T> where T : IAceDataObject IAceDataBlock : IAceDataObject IAceMessage : IAceDataObject AceDataObjectCollection:ICollection其中T:IAceDataObject IAceDataBlock

我想为我拥有的自定义泛型集合创建一组类似于.ToList()的扩展

这是我的物品

AceDataObjectCollection<T> : ICollection<T> where T : IAceDataObject
IAceDataBlock : IAceDataObject
IAceMessage : IAceDataObject
AceDataObjectCollection:ICollection其中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>();
AceDataObjectCollection objects=新的AceDataObjectCollection();
objects.Add(…)//在此处添加不同的数据对象
AceDataObjectCollection messages=objects.Where(o=>o是IAceMessage.ToAceDataObjectCollection();

我似乎不知道如何用泛型正确地形成扩展。

我相信这就是您要寻找的

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; 
}
publicstaticacedataobjectcollection到AceDataObjectCollection(此IEnumerable列),其中T:IAceDataObject
{    
AceDataObjectCollection对象=新的AceDataObjectCollection();
foreach(列中的T项)
对象。添加(项);
归还物品;
}

有点离题,但您可能对类型
LINQ方法感兴趣。因此,您可以直接说
.OfType()
这正是我所需要的,而不是您的
Where
调用。我错过了“where T:iacedaotobject”部分。非常感谢。