#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. Я обновил свой ответ. Надеюсь, теперь это похоже на ответ.