[英]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>
類型。 如果您知道它將包含聯系人,為什么不使用顯式鍵入而不是泛型? 如果不是,最好使用不同的名稱,然后在需要存儲時在方法末尾進行分配,正如我在樣本末尾所演示的那樣。
最后請注意,在反序列化之前不必創建T
的new
實例。 JsonConvert
將自動實例化類型。
您可以使用LINQ非常簡單地完成此操作。 無需將結果存儲在列表中:
IEnumerable<T> GetAllEntityRecords<T>(string URI, string authorization)
{
return Raw.Children().Select(child => JsonConvert.DeserializeObject<T>(child.ToString());
}
但是,如果由於某種原因您希望將它們存儲在列表中,則可以在該表達式的末尾添加.ToList()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.