如何从哈希表对象获取字段
本文关键字:获取 字段 对象 哈希表 | 更新日期: 2023-09-27 17:56:22
我在这里有一个问题,无法从 hastable 对象获取字段。 这是我拥有的:
我有一个 Unity C# 函数
void completionHandler( string error, object result )
{
debug.log(result.GetType); // the type of result is System.Collections.Hastable
}
无论如何都可以从结果中获取字段;我尝试过的:
什么都没显示
FieldInfo[] fields = result.GetType().GetFields(); foreach (FieldInfo fieldInfo in fields) { Debug.Log("Obj, Field: " + fieldInfo.Name); }
也没有显示任何东西:
Hashtable resultHash = result.toHashtable(); foreach (string keys in resultHash.Keys) { Debug.Log("Obj, keys: " + keys); }
很难理解所问的问题。下面是一段代码,用于解释您提供的代码片段:
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
是一个更安全的选择
如果要将对象转换为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]));
}
}
}