在常规任务中将List <object>强制转换为IEnumerable <t>

时间:2018-09-26 04:02:48

标签: c# list generics casting ienumerable

我有一个通用任务,我正在使用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;
}

2 个答案:

答案 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()