为什么我不能投射 IEnumerable列表到 BindingList?
是否可以将 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
只是要指出,您的 PagingList 不扩展 BindingList,它通过组合使用它。
我在寻找类似的答案时遇到了这个问题。 这里的答案似乎都没有为您的问题提供明确的解决方案,尽管他们提到了解决问题的宝贵要点。 我想我应该为路过的人添加一个。
因此,根据所提供的信息,简单的答案是否定的,但是无需重构类即可满足您所需的简单解决方案如下:
因此,您必须将 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:
So you'll have to physically add your AccountInfo items to your BindingList instance property 'Collection'.
BindingList
实现IEnumerable
,但并非所有IEnumerable
都是绑定列表(事实上,大多数都不是) 。您应该能够创建一个新的 BindingList 并将项目添加到可枚举实例中。
BindingList<T>
implementsIEnumerable<T>
, but not allIEnumerable<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.
您将 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)
如果您的帐户集合实现了 IList; 你应该能够这样做:
If your accounts collection implements IList<AccountInfo> you should be able to do this:
将绑定列表发送到 RenderListingsRows,而不是分页列表。 PagingList 不扩展 BindingList,而是使用组合。 因此出现了这个问题。
下面的例子。
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.