| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > дурацкая работа с массивом |
| Автор: Fyrklod 6.10.2007, 20:29 |
| не уверен, что правильно щас говорю.....но... можно ли сделать индексатор в классе так чтобы к массиву обращаться не по индексу типа int , а по имени, т.е. masiv["name1"], masiv["name2"] заранее прошу не ругаться, если это глупость |
| Автор: marcusmae 6.10.2007, 20:57 | ||||
Почему нет?
Теперь можно создать экземпляр такого крокодила и кормить строками :
|
| Автор: tol05 6.10.2007, 21:16 |
| Вместо Convert.ToInt32(name) лучше использовать Int32.Parse(name) (потому как эта реализация введена не в постороннем к строкам и числам классе Convert, а внутри самого Int, т.е. более оптимальный алгоритм) А еще лучше использовать Int32.TryParse (name, out result) ибо если строка не приведется к int, то выбросится исключение, которое никто (как я посмотрел) обрабатывать не собирался. |
| Автор: mr.DUDA 6.10.2007, 22:47 |
| Вообще, скорее всего имелось ввиду "как сделать доступ по имени" а не по индексу. В таком случае парсить ничего не надо, вместо этого заводим в классе поле с типом Dictionary<string, bla-bla-bla>, где "bla-bla-bla" - элемент массива, в терминах Fyrklod. А в get/set индексатора помещаем простейшую фигню типа получить/присвоить элемент Dictionary по строковому ключу. |
| Автор: marcusmae 6.10.2007, 23:14 | ||
Ха, ну если так, то можно использовать в чистом виде generic-словарь Dictionary<string, T>, где T - требуемый тип. Словарь и так уже имеет индексатор по ключу, то есть по именам Подробнее можно посмотреть в http://msdn2.microsoft.com/en-us/library/xfhwa508.aspx. |
| Автор: mr.DUDA 7.10.2007, 10:59 |
| Хотелось бы услышать автора топика, что он думает по данному вопросу. |
| Автор: Fyrklod 7.10.2007, 14:26 |
| всем спасибо |
| Автор: Fyrklod 7.10.2007, 15:16 |
| Данный вопрос поднимался для того чтобы доказать кое-кому что такое возможно |
| Автор: mr.DUDA 7.10.2007, 17:41 | ||
пожалуйста:
|
| Автор: GavriKos 7.10.2007, 20:13 |
| А нельзя еще проще? В С кажется можно было использовать любые перечисляемые типы как индексы массива. Т.е. в теории можно юзать и char. Не знаю, насколько это работало, но вот возможно ли в c# такое? |
| Автор: marcusmae 7.10.2007, 22:45 | ||||
GavriKos, нет. Даже в случае перечислений (enum) понадобится явное приведение типов. Но явно привести можно пробовать любой тип, char в частности :
Однако, есть такая штука, как явные и неявные операторы приведения - см. http://msdn2.microsoft.com/en-us/library/z5z9kes2(VS.71).aspx. Оттуда же можно понять, по какой причине эти неявные приведения не определены по умолчанию для втроенных типов :
|