質問されていることを理解するのは非常に困難です。あなたが提供したコードスニペットを説明するコードは次のとおりです。
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 クラスのパブリック フィールドを列挙しようとしているため、最初の出力は空です。何もありません。
ハッシュ テーブルが空であるため、2 番目の出力は空です。3 番目の出力は、出力が空でない場合に表示される内容を示しています。
カウントを出力して、コードのデバッグを試みることができます。
foreach (string keys in resultHash.Keys)
{
Debug.Log("Count: " + resultHash.Count.ToString());
}
このようにして、ハッシュテーブルが空であることを証明/反証できます。
方法もご確認くださいtoHashtable
。これは標準的な方法ではなく、あなたの例からそれが何をするのかわかりません。それは、人が期待するものとは非常に異なることをすることができます。オブジェクトがハッシュテーブル型であることがわかっている場合Hashtable resultHash = result as Hashtable
は、より安全な賭けです