簡體   English   中英

演員表 <object> 到IEnumerable <T> 一般任務中

[英]Cast List<object> to IEnumerable<T> within Generic Task

我有一個通用任務,其中我使用List<object>添加任務中指定類型的對象。

我想通過將該列表從list<object>強制轉換為IEnumerable<T>來返回此列表。 這可能嗎。

感謝任何幫助!

public List<Object> Contactcollection { get; set; }

Task<IEnumerable<T>> GetAllEntityRecords<T>(string URI, string authorization) where T : new()
{

    JEnumerable<JToken> children = Raw.Children();
    Contactcollection = new List<object>();
    foreach (JToken child in children)
    {
        T _contact = new T();
        _contact = JsonConvert.DeserializeObject<T>(child.ToString());

        Contactcollection.Add(_contact);
    }

    return (IEnumerable<T>)Contactcollection;
}

您可以使用OfType<T> LINQ擴展僅對T的實例進行過濾。

Contactcollection.OfType<T>();

但是,在這種情況下,您可以只使用List<T>來代替List<object> ,並避免所有強制轉換:-)。

Task<IEnumerable<T>> GetAllEntityRecords<T>(string URI, string authorization) where T : new()
{

    JEnumerable<JToken> children = Raw.Children();
    var results = new List<T>();
    foreach (JToken child in children)
    {            
        var result = JsonConvert.DeserializeObject<T>(child.ToString());

        results.Add(result);
    }
    Contactcollection = new List<object>(results.OfType<object>());
    return results;
}

問題是,為什么您的Contactcollection屬性具有List<object>類型。 如果您知道它將包含聯系人,為什么不使用顯式鍵入而不是泛型? 如果不是,最好使用不同的名稱,然后在需要存儲時在方法末尾進行分配,正如我在樣本末尾所演示的那樣。

最后請注意,在反序列化之前不必創建Tnew實例。 JsonConvert將自動實例化類型。

您可以使用LINQ非常簡單地完成此操作。 無需將結果存儲在列表中:

IEnumerable<T> GetAllEntityRecords<T>(string URI, string authorization)
{
  return Raw.Children().Select(child => JsonConvert.DeserializeObject<T>(child.ToString());
}

但是,如果由於某種原因您希望將它們存儲在列表中,則可以在該表達式的末尾添加.ToList()

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