簡體   English   中英

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

我正在嘗試執行以下演員

private void MyMethod(object myObject)  
{  
    if(myObject is IEnumerable)  
    {
        List<object> collection = (List<object>)myObject;  
        ... do something   
    }  
    else  
    {  
        ... do something  
    }  
}

但我總是以以下異常結束:

無法將“System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List

我真的需要這個工作,因為這個方法需要非常通用才能接收單個對象和 collections 兩種未指定的類型。

這是可能的,還是有另一種方法可以做到這一點。

謝謝你。

C# 4 將具有協變和逆變模板參數,但在那之前你必須做一些非泛型的事情

IList collection = (IList)myObject;

您不能將 IEnumerable<T> 強制轉換為 List<T>。

但是您可以使用 LINQ 完成此操作:

var result = ((IEnumerable)myObject).Cast<object>().ToList();

問題是,您正試圖升級到更豐富的 object。 您只需將項目添加到新列表中:

if (myObject is IEnumerable)
{
   List<object> list = new List<object>();
   var enumerator = ((IEnumerable) myObject).GetEnumerator();
   while (enumerator.MoveNext())
   {
      list.Add(enumerator.Current);
   }
}

你真的需要比普通IEnumerable提供的更多信息嗎? 只需將其轉換為並使用foreach即可。 我在某些協議緩沖區中面臨完全相同的情況,並且我發現轉換為IEnumerable (或IList以像列表一樣訪問它)效果很好。

這段代碼對我有用

List<Object> collection = new List<Object>((IEnumerable<Object>)myObject);

怎么樣

List<object> collection = new List<object>((IEnumerable)myObject);

必須加入樂趣...

    private void TestBench()
    {
        // An object to test
        string[] stringEnumerable = new string[] { "Easy", "as", "Pi" };

        ObjectListFromUnknown(stringEnumerable);
    }

    private void ObjectListFromUnknown(object o)
    {
        if (typeof(IEnumerable<object>).IsAssignableFrom(o.GetType()))
        {
            List<object> listO = ((IEnumerable<object>)o).ToList();
            // Test it
            foreach (var v in listO)
            {
                Console.WriteLine(v);
            }
        }
    }

現在是這樣的:

var collection = new List<object>(objectVar);

您需要像這樣使用as運算符進行類型轉換。

private void MyMethod(object myObject)  
{  
if(myObject is IEnumerable)  
{
    List<object> collection = myObject as(List<object>); 
    ... do something   
}  
else  
{  
    ... do something  
}  
}      

您還可以將 object 轉換為您的 DTO 列表。

首先序列化myObject ,然后將其反序列化到您的列表中。

這是代碼:

List<MyDto> myList = JsonConvert.DeserializeObject<List<MyDto>>(JsonConvert.SerializeObject(myObject));

上面的代碼中使用了Newtonsoft.Json

將 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.

相關問題 投IEnumerable <object> 列表 <object> 將對象轉換為IEnumerable <object> ? 從IEnumerable轉換為IEnumerable <object> Cast List之間的區別是什么? <object> 和Cast IEnumerable <object> 將對象轉換為IEnumerable 如何投射IEnumerable <object> 到一個IEnumerable <runtime type> 為什么IEnumerable <struct> 轉換為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> 演員表 <object> 到IEnumerable <T> 一般任務中 AutoFixture:解析 IEnumerable<t> ,無法將“ConvertedEnumerable”類型的 object 轉換為列表</t>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM