我在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
。
此外,这里并没有真正的性能问题,因为它只在程序开始时调用一次,虽然目前有明显的延迟,我会把它放到无论如何,在它自己的线程上,所以没有问题。更快的执行只是出于好奇。
答案 0 :(得分:4)
试试这个。
(info["colors"] as List<object>).ConvertAll(input => input.ToString());
你也可以使用直接投射(string)input
或input 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)
答案 2 :(得分:0)
我知道这段代码有点旧,但我们都知道这意味着什么:
List<object> l = new List<object>();
List<string> s = new List<string>();
foreach( var i in l )
s.Add((string)i);