如何从哈希表对象中获取字段

时间:2013-01-29 06:56:38

标签: c# hashtable unity3d

我有一个问题,从hastable对象获取字段。在这里我有:

我有一个统一的c#功能

void completionHandler( string error, object result )
{
    debug.log(result.GetType); // the type of result is System.Collections.Hastable 
}   

无论如何从结果中获取该字段; 我试过的:

  1. 没有显示任何内容

    FieldInfo[] fields = result.GetType().GetFields();
    foreach (FieldInfo fieldInfo in fields)
    {
      Debug.Log("Obj, Field: " + fieldInfo.Name);
    }
    
  2. 也没有显示任何内容:

    Hashtable resultHash = result.toHashtable();
    foreach (string keys in resultHash.Keys)
    {
      Debug.Log("Obj, keys: " + keys);
    }
    

2 个答案:

答案 0 :(得分:0)

如果您想将对象转换为Hashtable然后解析它,您可以试试这个:

void completionHandler(string error, object result)
{
    var hashTable = result as Hashtable;
    if (hashTable != null)
    {
        foreach (object key in hashTable.Keys)
        {
            Debug.Write(
                String.Format("key:{0} value:{1}", 
                    key.ToString(), 
                    hashTable[key]));
        }
    }
}

答案 1 :(得分:0)

很难理解被问到的是什么。 这是一段代码,解释了您提供的代码片段:

using System;
using System.Collections;
using System.Reflection;

namespace SO14577299
{
    class Program
    {
        static void Main()
        {
            object result = new Hashtable();
            //Trying to get public fields via reflection:
            //there are no public fields on this class
            FieldInfo[] fields = result.GetType().GetFields();
            foreach (FieldInfo fieldInfo in fields)
            {
                Console.WriteLine("Obj, Field: " + fieldInfo.Name);
            }
            Console.WriteLine("->1");

            Hashtable resultHash = result as Hashtable;
            //Trying to list all the keys
            //this is an empty collection, nothing there
            foreach (string keys in resultHash.Keys)
            {
                Console.WriteLine("Obj, keys: " + keys);
            }
            Console.WriteLine("->2");

            resultHash = new Hashtable();
            resultHash["a"] = "1";
            resultHash["b"] = "2";
            //Trying to list all the keys
            //Now there are two: a and b
            foreach (string keys in resultHash.Keys)
            {
                Console.WriteLine("Obj, keys: " + keys);
            }
            Console.WriteLine("->3");
        }
    }
}

以下是此代码的输出:

->1
->2
Obj, keys: a
Obj, keys: b
->3

第一个输出为空,因为您试图枚举Hashtable类的公共字段:没有。

第二个输出为空,只是因为哈希表为空。 如果输出不为空,则第三个输出显示正在打印的内容。

您可以尝试输出计数来尝试调试代码:

foreach (string keys in resultHash.Keys)
{
  Debug.Log("Count: " + resultHash.Count.ToString());
}

通过这种方式,您可以证明/反驳您的哈希表是空的。

另请检查toHashtable方法。它不是一种标准方法,你的例子中没有说明它可能做什么。它可以做一些与人们期望的完全不同的事情。如果您知道该对象是哈希表类型,Hashtable resultHash = result as Hashtable是一个更安全的赌注