簡體   English   中英

將對象轉換為IEnumerable <object> ?

[英]Cast object to IEnumerable<object>?

如何將objectIEnumerable<object>

我知道該對象實現了IEnumerable<object>但我不知道它是什么類型。 它可以是一個數組,一個List<T> ,或者其他什么。


一個簡單的測試用例我正在努力工作:

static void Main(string[] args)
{
    object arr = new[] { 1, 2, 3, 4, 5 };
    foreach (var item in arr as IEnumerable<object>)
        Console.WriteLine(item);
    Console.ReadLine();
}

沒有具體的用例,很難回答這個問題,但是你可能會發現只需轉換到非通用的IEnumerable接口就足夠了。

對於大多數被認為是“序列”的類型,這通常有兩個原因。

  1. “經典”.NET 1.x集合類實現IEnumerable
  2. 通用IEnumerable<T>接口繼承自IEnumerable ,因此轉換應該適用於System.Collections.Generic,LINQ序列等中的泛型集合類。

編輯

至於為什么你提供的樣本不起作用:

  1. 這在C#3中不起作用,因為它不支持通用接口協方差 - 您無法將IEnumerable<Derived>視為IEnumerable<Base>
  2. 盡管IEnumerable<T>是協變的,但這在C#4中不起作用,因為值類型不支持方差 - 來自int[]IEnumerable<int>- > IEnumerable<object>不能成功。

我遇到了同樣的問題,協方差不支持值類型,我有一個object和實際類型的List<Guid> ,需要一個IEnumerable<object> 只有IEnumerable不夠好才能生成IEnumerable的方法是使用linq Cast方法

((IEnumerable)lhsValue).Cast<object>()

演員收到 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>

暫無
暫無

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

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