-3

我在这里从 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);
    }
    
4

2 回答 2

0

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

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]));
        }
    }
}
于 2013-01-29T07:08:58.143 回答
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是一个更安全的选择

于 2013-01-29T07:27:56.293 回答