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
In C#, an IEnumerable can be converted to a List through the following lines of code: IEnumerable enumerable = Enumerable. Range(1, 300); List asList = enumerable. ToList();
Use the ToList() Method to Convert an IEnumerable to a List in C# Enumerable. ToList(source); The method ToList() has one parameter only.
The IReadOnlyCollection interface extends the IEnumerable interface and represents a basic read-only collection interface.
You cannot, because IEnumerable<T> does not necessarily represent a collection to which items can be added. In fact, it does not necessarily represent a collection at all! For example: IEnumerable<string> ReadLines() { string s; do { s = Console.
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'.
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.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With