将List <object>类型的对象转换为List <string> </string> </object>

时间:2014-04-16 09:27:58

标签: c# casting

我在Unity中使用MiniJson解析JSON字符串。现在我的值是一个字符串列表。虽然我得到了这个对象。对象的基础类型是List<object>,但实际上它应该是List<string>。所以目前我这样做:

void SetInfo(Dictionary<string,object> info) {
    Colors = (info["colors"] as List<object>).OfType<string>().ToList();
}

字典是我从MiniJson库中获得的。这非常有效。虽然看起来有点难看,但很多不必要的演员,我想知道是否有更好的方法来做到这一点。我主要是寻找更清晰的代码和更快的执行,因为这些条目很多。

编辑:我对此并不十分清楚。在信息字典中有一堆键/值对,值的类型各不相同。我可以非常轻松地进行投射,但信息[&#​​34;颜色&#34;]对象是我遇到问题的对象。

所以当我info["colors"]时,我会得到object,其基础类型为List<object>。此列表中的objects实际上是strings

此外,这里并没有真正的性能问题,因为它只在程序开始时调用一次,虽然目前有明显的延迟,我会把它放到无论如何,在它自己的线程上,所以没有问题。更快的执行只是出于好奇。

3 个答案:

答案 0 :(得分:4)

试试这个。

(info["colors"] as List<object>).ConvertAll(input => input.ToString());

你也可以使用直接投射(string)inputinput as string,这甚至更快(在stackoverflow上有关于投射的争论)。

info["colors"] as List<object>可能会导致null,所以我更安全并将代码包装成这样:

List<object> colors = info["colors"] as List<object>;
List<string> typedColors = null;
if (colors!=null)
{
   typedColors = colors.ConvertAll(input => input as string);
}

答案 1 :(得分:0)

您是否考虑过使用inout关键字

答案 2 :(得分:0)

我知道这段代码有点旧,但我们都知道这意味着什么:

    List<object> l = new List<object>();
    List<string> s = new List<string>();
    foreach( var i in l )
        s.Add((string)i);