我有一个问题,从hastable对象获取字段。在这里我有:
我有一个统一的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);
}
答案 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
是一个更安全的赌注