c# - 通用扩展

标签 c# .net extension-methods

我想为我拥有的自定义通用集合创建一组类似于 .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>();

我似乎无法弄清楚如何使用泛型正确形成扩展。

最佳答案

我相信这就是您正在寻找的。

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

关于c# - 通用扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053688/

相关文章:

.net - schtasks.exe 与 ITaskScheduler

c# - 如何使用 SharpZipLib 在 C# 中创建超过 7 GB 的 zip 文件?

c# - ASP.Net Azure OpenId 集成

c# - 在 WCF 的其他契约(Contract)中将 MessageContract 作为 MessageBodyMember

ios - 无法将 iOS 中常见的 Kotlin 扩展函数用作 Swift 扩展

c# - (为什么)作为扩展方法调用是首选...方式?

Kotlin:可见性修饰符更改匿名对象的类型

c# - 在asp.net中创建一个基本类

c# - WPF 和 WIndows 10. 窗口周围的不可见边框?

c# - 如何使数据绑定(bind)类型安全并支持重构?