C#在System.Object []中访问数据

时间:2009-01-07 13:18:47

标签: c#

我在C#编码,我有一个包含大量数据的字典。其中一个成员是“孩子”,但当我试图写出它的价值时,我得到: System.Object的[]

我知道孩子们包含数据,可能是嵌套数据,但我不确定它是否是列表,字典,数组等。

如何写出“孩子”中的所有数据?

5 个答案:

答案 0 :(得分:3)

任何实例化的.NET类型对“ToString()”的默认响应是写出完全限定的类型名称。

System.Object []表示您有一个数组,其中每个元素的类型为“Object”。这个“盒子”可以包含任何东西,因为.NET中的每个类型都派生自Object。以下可能会告诉您实例化类型实际包含的数组:

foreach (object o in children)
  Console.WriteLine(o != null ? o.GetType().FullName : "null");

答案 1 :(得分:2)

它是object引用的数组,因此您需要迭代它并提取对象,例如:

// could also use IEnumerable or IEnumerable<object> in
// place of object[] here
object[] arr = (object[])foo["children"];

foreach(object bar in arr) {
    Console.WriteLine(bar);
}

如果你知道对象是什么,你可以投射等 - 或者你可以使用LINQ OfType / Cast扩展方法:

foreach(string s in arr.OfType<string>()) { // just the strings
    Console.WriteLine(s);
}

或者您可以测试每个对象:

foreach(object obj in arr) { // just the strings
    if(obj is int) {
        int i = (int) obj;
        //...
    }
    // or with "as"
    string s = obj as string;
    if(s != null) {
        // do something with s
    }
}

除此之外,你将不得不添加更多细节......

答案 2 :(得分:1)

(注意我没有在VS中测试这段代码,在这里处理内存)。

object[] children = (object[])foo["children"];
foreach(object child in children)
    System.Diagnostics.Debug.WriteLine(child.GetType().FullName);

这应该转出孩子的类名。

如果你在foo [“children”]上做一个foreach,你不应该失败找不到公共迭代器,因为根据定义,数组有一个(除非我遗漏了一些东西)。

答案 3 :(得分:1)

我意识到这个帖子已经有一年多了,但我想发布一个解决方案,我发现以防万一有人试图从使用Cook Computing XML-RPC Library返回的System.Object []中获取数据

返回Children对象后,使用以下代码查看其中包含的键/值:

foreach (XmlRpcStruct rpcstruct in Children)
        {
            foreach (DictionaryEntry de in rpcstruct)
            {
                Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
            }
            Console.WriteLine();
        }

答案 4 :(得分:0)

“我知道孩子们包含数据,可能是嵌套数据,但我不确定它是否是列表,字典,数组等”

因此,childreen是IEnumerable或不是集合

试试这段代码

void Iterate(object childreen)
{
  if(data is IEnumerable)
     foreach(object item in data)
      Iterate(item);
  else Console.WriteLine(data.ToString());
}