c# – 更好地将IEnumerable转换为用户类型

c# – 更好地将IEnumerable转换为用户类型,第1张

概述我有一个自定义集合类型,这样定义: public abstract class RigCollectionBase<T> : Collection<T>, IEnumerable<T>, INotifyPropertyChanged, IBindingList, ICancelAddNew where T : BusinessObjectBase, new() 注意:这是基类,有20个左右的子类实 我有一个自定义集合类型,这样定义:
public abstract class RigCollectionBase<T> : Collection<T>,IEnumerable<T>,INotifyPropertyChanged,IBindingList,ICancelAddNew where T : BusinessObjectBase,new()

注意:这是基类,有20个左右的子类实现如下:

public class MyCollection : RigCollectionBase<MyObject>

我们在我们的代码中使用了很多linq,并且你可能知道,linq函数返回IEnumerable< T>.我正在寻找,是一个简单而简单的方法,从IEumberable< MyObject>返回MyCollection.铸造是不允许的,我得到例外“不能从…铸造”

这是我想出来的答案,它确实有效,但似乎有些笨拙和过于复杂.也许它不是,但我想我会得到这里,看看有没有一个更好的方法.

public static class Extension{    /// <summary>    /// Turn your IEnumerable into a RigCollection    /// </summary>    /// <typeparam name="T">The Collection type</typeparam>    /// <typeparam name="U">The Type of the object in the collection</typeparam>    /// <param name="col"></param>    /// <returns></returns>    public static T MakeRigCollection<T,U> (this IEnumerable<U> col) where T : RigCollectionBase<U>,new() where U : BusinessObjectBase,new()    {        T retCol = new T();        foreach (U myObj in col)            retCol.Add(myObj);        return retCol;    }}

我真的在寻找,是这样的.有没有办法实现基类,以便我可以使用简单的转换从IEnumerable到MyCollection …

var linqResult = oldCol.Where(a=> someCondition);MyCollection newCol = (MyCollection)linqResult;

不,上面的代码不行,我实际上不是100%确定为什么是…但它不.只是觉得有一些非常明显的一步,我没有看到….

解决方法 您的方法MakeRigCollection基本上是正确的方法.这是一个使用更简单的变体,但要简单实现:
TCollection MakeRigCollectionSimple<TCollection,TItem>(    this IEnumerable<TItem> items,TCollection collection)    where TCollection : ICollection<TItem>{        foreach (var myObj in items)            collection.Add(myObj);        return collection;}

我希望我对了.你这样使用:

MakeRigCollectionSimple(items,new MyCollection());

要么

items.MakeRigCollectionSimple(new MyCollection());

现在你有第二个参数填写,但作为交换,我们能够摆脱所有疯狂的泛型东西.只剩下简单的泛型类型推断完全踢.此外,这将适用于所有集合类型,而不仅仅是您的RigCollections.

总结

以上是内存溢出为你收集整理的c# – 更好地将IEnumerable转换为用户类型全部内容,希望文章能够帮你解决c# – 更好地将IEnumerable转换为用户类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存