簡體   English   中英

投IEnumerable <object> 列表 <object>

[英]Cast IEnumerable<object> to List<object>

我有以下代碼:

public IList<MyObject> GetSomeData(string inputParam)
{
    var temp = repository.GetData(inputParam);
    var list = temp as List<MyObject>;
    return list;
}

repository.GetData的返回值是IEnumerable<IMyObject>

當我查看temp的值時,它有400多條記錄。 我把它投射到列表的那一刻,它變成了空。 為什么這個演員不可能?

它返回null,因為IEnumerable實際上不是列表。 只有當特別是IEnumerable碰巧是List而不是其他類型的序列時, IEnumerable才會成功。 如果要有列表,則需要創建新列表並將序列中的項添加到該列表中。

除非從repository.GetData返回的值的基礎對象與您嘗試將其轉換為的內容匹配,否則結果將始終為null 因為方法的泛型元素類型和從repository.GetData實際返回的內容是不同的,所以您需要進行一些轉換才能獲得所需的結果

假設MyObject實現了IMyObject我至少可以想到使用System.Linq獲取你尋求的結果的方法。

選項1: Cast<T>()

將System.Collections.IEnumerable的元素轉換為指定的類型。

首先使用Cast<MyObject>() linq擴展轉換temp的內容,然后使用ToList<T>()擴展方法獲得IList<MyObject>

public IList<MyObject> GetSomeData(string inputParam)
{
    //repository.GetData returns IEnumerable<IMyObject>
    var temp = repository.GetData(inputParam);
    var list = temp.Cast<MyObject>().ToList();
    return list;
}

選項2: OfType<T>()

根據指定的類型過濾System.Collections.IEnumerable的元素。

使用OfType<MyObject>() linq擴展名過濾temp的內容,然后使用ToList<MyObject>()擴展方法獲取IList<MyObject>

public IList<MyObject> GetSomeData(string inputParam)
{
    //repository.GetData returns IEnumerable<IMyObject>
    var temp = repository.GetData(inputParam);
    var list = temp.OfType<MyObject>().ToList();
    return list;
}

演員收到 object 到列表<object>或 IEnumerable<object><div id="text_translate"><p> 我正在嘗試執行以下演員</p><pre>private void MyMethod(object myObject) { if(myObject is IEnumerable) { List&lt;object&gt; collection = (List&lt;object&gt;)myObject; ... do something } else {... do something } }</pre><p> 但我總是以以下異常結束:</p><p> 無法將“System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List</p><p> 我真的需要這個工作,因為這個方法需要非常通用才能接收單個對象和 collections 兩種未指定的類型。</p><p> 這是可能的,還是有另一種方法可以做到這一點。</p><p> 謝謝你。</p></div></object></object>

[英]Cast received object to a List<object> or IEnumerable<object>

將 object 投到列表中<object><div id="text_translate"><p>由於某些我無法控制的原因,需要定義我的一種方法來接受 object 類型的一個參數。 但我知道這個參數的值實際上是 List 類型,帶有一個我不知道的通用參數。</p><p> 我正在嘗試將此 object 轉換為 List&lt;object&gt;,但不知道如何在不知道確切的通用參數是什么的情況下執行此操作。</p><p> 我想做這樣的事情:</p><pre> public static List&lt;object&gt; ConvertToList(object input) { if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List&lt;&gt;))) { //Of course this does not work, because input might for example be of type List&lt;string&gt; return (List&lt;object&gt;) input; } else { return null; } }</pre><p> 我知道,如果我有List&lt;T&gt;而不是object input ,使用以下方法會很容易:</p><pre> return input.Cast&lt;object&gt;()</pre><p> 但不幸的是,我堅持使用 object 參數。 知道如何解決這個問題嗎?</p></div></object>

[英]Cast object to List<object>

暫無
暫無

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

相關問題 演員收到 object 到列表<object>或 IEnumerable<object><div id="text_translate"><p> 我正在嘗試執行以下演員</p><pre>private void MyMethod(object myObject) { if(myObject is IEnumerable) { List&lt;object&gt; collection = (List&lt;object&gt;)myObject; ... do something } else {... do something } }</pre><p> 但我總是以以下異常結束:</p><p> 無法將“System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List</p><p> 我真的需要這個工作,因為這個方法需要非常通用才能接收單個對象和 collections 兩種未指定的類型。</p><p> 這是可能的,還是有另一種方法可以做到這一點。</p><p> 謝謝你。</p></div></object></object> 將對象轉換為IEnumerable <object> ? Cast List之間的區別是什么? <object> 和Cast IEnumerable <object> 從IEnumerable轉換為IEnumerable <object> 將對象轉換為IEnumerable 如何投射IEnumerable <object> 到一個IEnumerable <runtime type> 為什么IEnumerable <struct> 轉換為IEnumerable <object> ? 演員表 <object> 到IEnumerable <T> 一般任務中 將 object 投到列表中<object><div id="text_translate"><p>由於某些我無法控制的原因,需要定義我的一種方法來接受 object 類型的一個參數。 但我知道這個參數的值實際上是 List 類型,帶有一個我不知道的通用參數。</p><p> 我正在嘗試將此 object 轉換為 List&lt;object&gt;,但不知道如何在不知道確切的通用參數是什么的情況下執行此操作。</p><p> 我想做這樣的事情:</p><pre> public static List&lt;object&gt; ConvertToList(object input) { if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List&lt;&gt;))) { //Of course this does not work, because input might for example be of type List&lt;string&gt; return (List&lt;object&gt;) input; } else { return null; } }</pre><p> 我知道,如果我有List&lt;T&gt;而不是object input ,使用以下方法會很容易:</p><pre> return input.Cast&lt;object&gt;()</pre><p> 但不幸的是,我堅持使用 object 參數。 知道如何解決這個問題嗎?</p></div></object> 無法轉換對象以鍵入類型為ienumerable的查詢
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM