Получить объект хеш-таблицы по ключу и изменить его общедоступные свойства

#c# #hashtable

#c# #хеш-таблица

Вопрос:

Прежде всего, я объявляю хеш-таблицу и ее значения. Ключом записи хеш-таблицы является идентификатор GUID, а значением является объект с несколькими строковыми значениями.

     Guid g = Guid.NewGuid();
    Hashtable hash = new Hashtable();
    InstallationFiles instFiles = new InstallationFiles(string1, string2, string3);
    hash.Add(g, instFiles);
    //...add many other values with different GUIDs...
  

Моя цель — дать пользователю возможность РЕДАКТИРОВАТЬ строку 1, string2, string3. Короче говоря, я нахожусь в положении, когда я могу получить «GUID g» записи, которую необходимо отредактировать:

    public void edit() 
   {
         //here I retrieve the GUID g of the item which has to be edited:
         object objectHash = item.Tag;
         //here i loop through all hash entries to find the editable one:
         foreach(DictionaryEntry de in hash)
         {
            if(de.Key.ToString() == objectHash) 
            {
            //here I would like to access the selected entry and change string1 - 
           //the line below is not working.

            hash[de.Key].string1 = "my new value"; 
            }
         }

   }
  

Как мне заставить эту строку работать?

     hash[de.Key].string1 = "my new value"; 
  

Комментарии:

1. Используется Dictionary<Guid, InstallationFiles> для получения переменной строгого типа и доступа к ее свойствам

Ответ №1:

Используйте Dictionary<Guid, InstallationFiles> вместо HashTable

upd. Вы можете использовать это.

  (hash[de.Key] as InstallationFiles).string1 = "asdasd" 
  

Хорошо, объяснение:

Поскольку хеш-таблица не является универсальным типом, она содержит ссылки на ключи и значения в виде объектов.

Вот почему, когда вы получаете доступ к своему значению hashtable[mykey] , вы получаете ссылку на Object . Чтобы сделать его ссылкой на ваш type ( InstallationFiles ), вы должны из «ссылки на Object » получить «ссылку на InstallationFiles «. В моем примере я использую as для этого оператор «».

Комментарии:

1. Мой босс хочет, чтобы я использовал хеш-таблицу. Я вообще не могу заставить его работать с хеш-таблицей?

2. Итак, (hash[de.Key] as InstallationFiles).string1 = "asdasd"

3. Большое спасибо. Это работает. В следующий раз я постараюсь использовать Dictionary.

4. Хотя это, безусловно, хороший совет, это вовсе не ответ на вопрос. Это то, что должно быть опубликовано в качестве комментария.

5. @Servy Привет, Servy. Я обновил свой ответ. Надеюсь, теперь это похоже на ответ.