-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

オブジェクトを に変換して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]));
        }
    }
}
于 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 クラスのパブリック フィールドを列挙しようとしているため、最初の出力は空です。何もありません。

ハッシュ テーブルが空であるため、2 番目の出力は空です。3 番目の出力は、出力が空でない場合に表示される内容を示しています。

カウントを出力して、コードのデバッグを試みることができます。

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

このようにして、ハッシュテーブルが空であることを証明/反証できます。

方法もご確認くださいtoHashtable。これは標準的な方法ではなく、あなたの例からそれが何をするのかわかりません。それは、人が期待するものとは非常に異なることをすることができます。オブジェクトがハッシュテーブル型であることがわかっている場合Hashtable resultHash = result as Hashtableは、より安全な賭けです

于 2013-01-29T07:27:56.293 に答える