2016-10-04 2 views
1

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

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 г» в записи, которая должна быть отредактирован:

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"; 
+2

Используйте '' Словарь '', чтобы получить строго переменную типа и получить доступ к его свойствам – usercr

ответ

1

Использование Dictionary<Guid, InstallationFiles> вместо HashTable

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

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

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

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

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

+0

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

+0

Итак, '' '(hash [de.Key] как InstallationFiles) .string1 =" asdasd "' '' – tym32167

+0

Большое спасибо. Оно работает. В следующий раз я попытаюсь использовать словарь. – Dovile