[英]Why can't Dictionary<T1, List<T2>> be cast to Dictionary<T1, IEnumerable<T2>>?
[英]Why can i not cast an IEnumerable<T> list to a BindingList<t>?
是否可以將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
}
}
但似乎我不能在兩者之間施展,任何人都可以指出我錯過了什么?!
非常感謝
本
BindingList<T>
實現IEnumerable<T>
,但並非所有IEnumerable<T>
都是綁定列表(事實上,大多數都不是)。
您應該能夠創建一個新的BindingList並在可枚舉實例中添加項目。
只是要指出,你的PagingList沒有擴展BindingList,它通過組合使用它。
我遇到了這個尋找類似的答案。 這里的答案似乎都沒有為你的問題提供一個明確的解決方案,盡管他們在提出問題時提到了有價值的觀點。 我以為我會為路過的人添加一個。
因此,鑒於提供的信息,簡單的答案是否定的,但是如果不重構您的類,您需要的簡單解決方案是:
IEnumerable<AccountInfo> accounts= bll.GetAccounts(u.UserName, u.Password);
myPagingList.Collection = new BindingList<Foo>(myfoos.ToList());
因此,您必須將您的AccountInfo項物理添加到BindingList實例屬性'Collection'。
您將PagingList傳遞給RenderListingsRows,它不實現IEnumerable。
通常,要使PagingList成為BindingList的擴展,它必須實現BindingList實現的所有接口。 但目前它沒有實現任何一個。
您應該從BindingList繼承PagingList,或者實現所有這些接口,即使只是通過調用Collection對象的方法也是如此。
或者,你可以簡單地寫一下(list.Collection中的var項)
如果您的帳戶集合實現IList <AccountInfo>,您應該能夠這樣做:
PagedList<AccountInfo> paged = new PagedList<AccountInfo>();
paged.Collection = new BindingList<AccountInfo>((IList<AccountInfo>)accounts);
將綁定列表發送到RenderListingsRows而不是分頁列表。 PagingList不會擴展BindingList,而是使用composision。 因此這個問題。
以下示例。
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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.