为什么我不能投射 IEnumerable列表到 BindingList

发布于 2024-07-25 11:58:14 字数 795 浏览 5 评论 0原文

是否可以将 IEnumerable 列表转换为 BindingList 集合?

IEnumerable 列表是类型化对象的列表,例如:

IEnumerable<AccountInfo> accounts = bll.GetAccounts(u.UserName, u.Password);

我的 PagingList 只是扩展 BindingList:

public class PagingList<T> 
{
    public BindingList<T> Collection { get; set; }
    public int Count { get; set; }

    public PagingList()
    {
        Collection = new BindingList<T>();
        Count = 0;
    }
}

我只是想将我的 IEnumerable 列表传递给使用我的 PagingControl 呈现列表的方法:

 protected void RenderListingsRows(PagingList<AccountInfo> list)
   {
     foreach (var item in list)
     {
       //render stuff
     }
   }

但似乎我无法在两者之间进行转换,任何人都可以指出我缺少什么?!

非常感谢

Is it possible to cast an IEnumerable list to a BindingList collection?

The IEnumerable list is a list of typed objects e.g:

IEnumerable<AccountInfo> accounts = bll.GetAccounts(u.UserName, u.Password);

And my PagingList just extends BindingList:

public class PagingList<T> 
{
    public BindingList<T> Collection { get; set; }
    public int Count { get; set; }

    public PagingList()
    {
        Collection = new BindingList<T>();
        Count = 0;
    }
}

I just wanted to pass my IEnumerable list to a method that renders out the list with my PagingControl:

 protected void RenderListingsRows(PagingList<AccountInfo> list)
   {
     foreach (var item in list)
     {
       //render stuff
     }
   }

But it seems i cannot cast between the two, can anyone point out what i'm missing?!

Many thanks

Ben

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

挽袖吟 2024-08-01 11:58:14

只是要指出,您的 PagingList 不扩展 BindingList,它通过组合使用它。

我在寻找类似的答案时遇到了这个问题。 这里的答案似乎都没有为您的问题提供明确的解决方案,尽管他们提到了解决问题的宝贵要点。 我想我应该为路过的人添加一个。

因此,根据所提供的信息,简单的答案是否定的,但是无需重构类即可满足您所需的简单解决方案如下:

IEnumerable<AccountInfo> accounts= bll.GetAccounts(u.UserName, u.Password);
myPagingList.Collection = new BindingList<Foo>(myfoos.ToList());

因此,您必须将 AccountInfo 项物理添加到 BindingList 实例属性“Collection”中。

Just to point out, your PagingList does not extend BindingList, it uses it through composition.

I came across this looking for a similar answer. None of the answers here seem to provide a clear solution to your question, although they mentioned valuable points in figuring it out. I thought I'd add one for anyone passing by.

So given the information provided, the simple answer is no, but a simple solution to what you need without refactoring your classes is this:

IEnumerable<AccountInfo> accounts= bll.GetAccounts(u.UserName, u.Password);
myPagingList.Collection = new BindingList<Foo>(myfoos.ToList());

So you'll have to physically add your AccountInfo items to your BindingList instance property 'Collection'.

遗弃M 2024-08-01 11:58:14

BindingList 实现 IEnumerable,但并非所有 IEnumerable 都是绑定列表(事实上,大多数都不是) 。

您应该能够创建一个新的 BindingList 并将项目添加到可枚举实例中。

BindingList<T> implements IEnumerable<T>, but not all IEnumerable<T> are binding lists (in fact, most aren't).

You should be able to create a new BindingList and add the items in the enumerable instance.

一抹苦笑 2024-08-01 11:58:14

您将 PagingList 传递到 RenderListingsRows 中,它不实现 IEnumerable。

一般来说,PagingList 要成为 BindingList 的扩展,它必须实现 BindingList 实现的所有接口。 但目前它还没有实现其中任何一个。

您应该从 BindingList 继承 PagingList,或者实现所有这些接口,即使只是通过调用 Collection 对象的方法。

或者,您可以简单地编写 for (var item in list.Collection)

You pass PagingList into your RenderListingsRows, which does not implement IEnumerable.

In general, for PagingList to be an extension over BindingList it has to implement all interfaces that BindingList implements. But currently it does not implement any of them.

You should either inherit PagingList from BindingList, or implement all these interfaces, even if simply by calling methods of Collection object.

Or, you can just simply write for (var item in list.Collection)

﹂绝世的画 2024-08-01 11:58:14

如果您的帐户集合实现了 IList; 你应该能够这样做:

PagedList<AccountInfo> paged = new PagedList<AccountInfo>();
paged.Collection = new BindingList<AccountInfo>((IList<AccountInfo>)accounts);

If your accounts collection implements IList<AccountInfo> you should be able to do this:

PagedList<AccountInfo> paged = new PagedList<AccountInfo>();
paged.Collection = new BindingList<AccountInfo>((IList<AccountInfo>)accounts);
冷夜 2024-08-01 11:58:14

将绑定列表发送到 RenderListingsRows,而不是分页列表。 PagingList 不扩展 BindingList,而是使用组合。 因此出现了这个问题。

下面的例子。

 public class PagingList<T>
        {
            public BindingList<T> Collection { get; set; }
            public int Count { get; set; }

            public PagingList()
            {
                Collection = new BindingList<T>();
                Count = 0;
            }

        }

        public void CallRenderListingsRows()
        {
            var pagingList = new PagingList<PostcodeDetail>();

            RenderListingsRows(pagingList.Collection);
        }

        protected void RenderListingsRows(BindingList<PostcodeDetail> list)
        {
            foreach (var item in list)
            {
                //render stuff
            }
        }

Send the binding list to the RenderListingsRows not the paging list. PagingList does not extend BindingList it uses composision instead. Hence the issue.

Example below.

 public class PagingList<T>
        {
            public BindingList<T> Collection { get; set; }
            public int Count { get; set; }

            public PagingList()
            {
                Collection = new BindingList<T>();
                Count = 0;
            }

        }

        public void CallRenderListingsRows()
        {
            var pagingList = new PagingList<PostcodeDetail>();

            RenderListingsRows(pagingList.Collection);
        }

        protected void RenderListingsRows(BindingList<PostcodeDetail> list)
        {
            foreach (var item in list)
            {
                //render stuff
            }
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文