我有一个通用任务,我正在使用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;
}
答案 0 :(得分:2)
您可以使用!!parse_expr(...)
LINQ扩展名仅对df1 <- read.table(text =
"Sam Frank Dennis Steven Robert Georgia
Region_1 218 763 811 812 797 574
Region_2 474 983 343 697 310 335
Region_3 700 813 133 212 906 680
Region_4 212 581 893 514 530 795", header = T)
df2 <- read.table(text =
"'Team 1' 'Sam + Robert'
'Team 2' 'Frank + Georgia'
'Team 3' 'Frank + Steven'
'Team 4' 'Robert + Dennis'
'Team 5' 'Frank + Sam'", header = F)
的实例进行过滤。
OfType<T>
但是,在这种情况下,您可以只使用T
来代替Contactcollection.OfType<T>();
并避免所有的转换:-)。
List<object>
问题是,为什么您的List<T>
属性的类型为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
的{{1}}实例。 List<object>
将自动实例化类型。
答案 1 :(得分:0)
您可以使用LINQ非常简单地执行此操作。无需将结果存储在列表中:
IEnumerable<T> GetAllEntityRecords<T>(string URI, string authorization)
{
return Raw.Children().Select(child => JsonConvert.DeserializeObject<T>(child.ToString());
}
但是,如果出于某种原因您更愿意将它们存储在列表中,则可以在该表达式的末尾添加一个.ToList()
。