Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > Hashtable в качестве значения Hashtable(хеш хешей) |
Автор: tot 6.3.2009, 20:28 | ||||||
вот такой незатейливый код
как теперь обратится к вложенному хешу(добавить к пару)? вот так выдает ошибку
можно конечно через временную переменную
но смотрится отвратительно, писать долго, да еще и целая бесполезная переменая вылазит и не пойду в случае большей вложенности. |
Автор: Partizan 6.3.2009, 20:35 | ||
|
Автор: source777 6.3.2009, 20:58 |
Hashtable вообще отвратно смотрится, как и любая нетипизированная коллекция, юзай Dictionary. |
Автор: diadiavova 6.3.2009, 21:02 |
Ещё можно использовать System.Collections.Generic.Dictionary вместо Hashtable, тогда приведение типов не понадобится. |
Автор: tot 7.3.2009, 01:09 | ||||
Спасибо за помощь. Еще вопрос: как передать параметр по ссылке с одновременным преобразованием типов?
выдает ошибку для обхода этого создаю лямбда функцию
наверняка можно как то проще |
Автор: mihryak 7.3.2009, 01:50 |
класс по ссылке? зачем? он уже reference (ссылочный) тип, а ref полезен для value-types (типов-значений), без него передаётся не экземпляр, а его копия и, как уже заметили, всё прогрессивное человечество использует дженерики, то, что ты успел подружиться с Hashtable, не оправдывает отказ от строгой типизации, тем более при использовании дженериков вопрос о приведении типа вообще не возникнет |
Автор: mihryak 7.3.2009, 16:56 |
можно пример? его можно использовать и для ссылочных типов (поэтому и написал "зачем?", а не "так нельзя"), но в голову ничего некривого не приходит |
Автор: source777 7.3.2009, 18:16 | ||
Легко, стандартный пример:
Вообще, при применении модификатора ref для параметров ссылочных типов в метод передаётся не ссылка на объект, а ссылка на ссылку на объект, что позволяет не только менять поля объекта, но и изменить значение самой ссылки. Подробнее читай http://msdn.microsoft.com/ru-ru/library/s6938f28.aspx. |
Автор: -Mikle- 7.3.2009, 18:35 | ||
Еще пример (более наглядный):
|
Автор: mihryak 7.3.2009, 19:39 | ||
Зачем этот код может понадобиться? Я прекрасно понимаю, что он делает, - но зачем?
Я это тоже знаю, со swap'ом согласен, в сортировках порой применяется и в .... а где ещё? Но, право слово, за всё время, что занимаюсь программированием, мне ни разу не требовалось изменять ссылку переданного объекта. В то же время, регулярно вижу код, где используют ref в тех местах, где он вообще не нужен или без него код выглядел бы более красивым. В моём понимании, параметр либо входной, либо выходной (давайте без интеропов всяких это прочитаем). Даже к out отношусь крайне скептически - то ещё уродство, но в некоторых случаях без него никак. |
Автор: PashaPash 8.3.2009, 12:58 |
mihryak, TryGet/TryParse? |
Автор: mihryak 8.3.2009, 13:30 |
угу, это как раз те моменты, когда без out реализация гораздо хуже, но ведь не refже |
Автор: Partizan 8.3.2009, 14:52 |
Модератор: От сути топика слишком отошли |
Автор: tot 9.3.2009, 12:10 |
да уж, очень сильно отошли от темы. По поводу то что классы передаются по ссылке понял, спасибо. Но на будущее как же передать ссылку на ссылку? |
Автор: PashaPash 9.3.2009, 21:08 | ||||
tot, просто в 2 строчки, без лямбды, не комильфо?
ref-у нужна присвоябельная переменная, а результату каста - оператора () - присвоить что-то не всегда получится. Потому что вернуть () может все что угодно, а не просто оригинальную ссылку с нужным типом. И обратное преобразование не всегда возможно. Смотри:
Теперь представь, что результат (A)b ты передаешь как параметр ref A. Куда компилятор дожен положить возвращаемое значение? В переменную B b? |
Автор: tot 10.3.2009, 19:09 | ||
Лишняя строчка стройность кода портит, думал что возможно решить проблему изящнее. Но если больше нет других вариантов то остается только так. |
Автор: PashaPash 10.3.2009, 19:22 |
код с ref (Hashtable)obj уже ничем не испортишь ![]() |
Автор: mihryak 10.3.2009, 19:24 |
прошу прощения за навязчивость выше уже высказывал мнение, что ref и hashtable не способствуют стройности ни разу |