Как получить поле из объекта hashtable

У меня есть проблема, чтобы получить поле из hastable объекта. вот что у меня есть:

У меня есть единственная функция c #

void completionHandler( string error, object result )
{
    debug.log(result.GetType);//the type of result is System.Collections.Hastable 
}   

есть все равно, чтобы получить поле от результата; что я пробовал:

  1. Didn't show anything

    FieldInfo[] fields = result.GetType().GetFields();
    foreach (FieldInfo fieldInfo in fields)
    {
      Debug.Log("Obj, Field: " + fieldInfo.Name);
    }
    
  2. Also didn't show anything:

    Hashtable resultHash = result.toHashtable();
    foreach (string keys in resultHash.Keys)
    {
      Debug.Log("Obj, keys: " + keys);
    }
    
3
nl ja de
Что вы подразумеваете под «полем»? Ваш вопрос очень неясен. Есть ли причина, по которой вы используете Hashtable , а не Dictionary <,> ?
добавлено автор Jon Skeet, источник
Ну, если использование resultHash.Keys не дает вам ничего, похоже, что оно пустое ... (Вы все еще не объяснили, что вы подразумеваете под «полем».)
добавлено автор Jon Skeet, источник
A Hashtable не имеет полей!
добавлено автор Richard Schneider, источник
Что такое «поле»? Что вы пытаетесь получить?
добавлено автор Andrew Savinykh, источник
А также вы можете дать определение «.toHashtable»?
добавлено автор Andrew Savinykh, источник
@JonSkeet проблема в том, что я не могу изменить тип результата. потому что это то, что я получаю от плагина. поле, что я имею в виду, похоже на результат ["field1"]
добавлено автор andre, источник
Я имею в виду DictionaryEntry, вот так. Я пытаюсь создать приложение для Android, и я покупаю плагин для единства, у которого есть некоторый код в c #. в коде плагина у них есть своя система регистрации. когда обработчик завершения запускает его запись/показ словаря из объекта результата в логарифме. поэтому я хочу, чтобы получить этот словарь и использовать его. Извините за мой плохой английский
добавлено автор andre, источник

2 ответы

Если вы хотите преобразовать объект в 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]));
        }
    }
}
0
добавлено
о человеке, это именно то, что я ищу. спасибо большому человеку. ты мой спаситель.
добавлено автор andre, источник

Очень сложно понять, что задают. Вот фрагмент кода, который объясняет предоставленные вами фрагменты кода:

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, Hashtable resultHash = result, поскольку Hashtable - более безопасная ставка

0
добавлено
@andre, так как вы новичок в StackOverflow, я хотел бы сообщить вам, что вы должны перенести ответы, которые помогли вам, и отметить один ответ в качестве ответа. Благодарю.
добавлено автор Andrew Savinykh, источник
@andre да, вы правы на первом. Что касается последнего: meta.stackexchange.com/a/5235/161449
добавлено автор Andrew Savinykh, источник
Я использую ваш второй вывод в своем коде. и все это работает. Благодарю вас за ваше объяснение. с этим все понятно. наилучшим образом, andre
добавлено автор andre, источник
Кажется, у меня должно быть 15 репутации, чтобы проголосовать за ответ. как отметить ответ в качестве ответа?
добавлено автор andre, источник
unity3d_ru
unity3d_ru
3 147 участник(ов)

Общение о Unity3D, GameDev. Оффтоп не приветствуется. Рекомендуем отключить уведомления. Also you can speak in English. Новости: @unity_news Оффтоп: @gamedevtalk Остальное: t.me/unity3d_ru/156562

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot