簡體   English   中英

為什么我不能將IEnumerable <T>列表轉換為BindingList <t>?

[英]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
            }
        }

為什么我不能從列表中投射<myclass>列出<object> ?<div id="text_translate"><p> 我有一個對象列表,它們屬於我的QuoteHeader類型,我想將此列表作為對象列表傳遞給能夠接受List&lt;object&gt;的方法。</p><p> 我的代碼行顯示...</p><pre> Tools.MyMethod((List&lt;object&gt;)MyListOfQuoteHeaders);</pre><p> 但是我在設計時收到以下錯誤...</p><pre> Cannot convert type 'System.Collections.Generic.List&lt;MyNameSpace.QuoteHeader&gt;' to 'System.Collections.Generic.List&lt;object&gt;'</pre><p> 我需要對我的 class 做任何事情來允許這樣做嗎? 我認為所有類都繼承自 object 所以我不明白為什么這不起作用?</p></div></object></myclass>

[英]Why can't I cast from a List<MyClass> to List<object>?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM