Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Получить значение для HashTable


Автор: Suppir 12.3.2012, 11:17
Код

            Hashtable monthes = new Hashtable();
            monthes.Add("января", "01");
            monthes.Add("февраля", "02");
            monthes.Add("марта", "03");
            monthes.Add("апреля", "04");
            monthes.Add("мая", "05");
            monthes.Add("июня", "06");
            monthes.Add("июля", "07");
            monthes.Add("августа", "08");
            monthes.Add("сентября", "09");
            monthes.Add("октября", "10");
            monthes.Add("ноября", "11");
            monthes.Add("декабря", "12");


                    Match m3 = Regex.Match(date_code_postfix, "^(\\d{1,2}) *\\.?(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря|\\d\\d)\\.? *(\\d{4}|\\d{2})[годав \\.]*(.+)");

                    if (m3.Success)
                    { 
                        day = m3.Groups[1].Value;
                        month = m3.Groups[2].Value;    # здесь получается month равен месяцу буквами, а мне его нужно преобразовать в цифры с помощью Hashtable. Как это сделать?
                        year = m3.Groups[3].Value;
                        code_postfix = m3.Groups[4].Value;
                    }


Если пишу вот так:
month = monthes[m3.Groups[2].Value];

то выдает ошибку:
Не удается неявно преобразовать тип "object" в "string". Существует явное преобразование (возможно, пропущено приведение типов)

Автор: dextermd 17.3.2012, 01:56
HashTable хранит ключи и значения в виде обьектов, поэтому полученное значение из HashTable нужно явно преобразовывать в правильный тип:

Код

month = monthes[m3.Groups[2].Value].ToString();

Автор: VSB 19.3.2012, 01:04
Не используйте Hashtable, если в этом нет необходимости.
Пользуйтесь Dictionary<TKey, TValue> или SortedDictionary<TKey, TValue>

Автор: Dennnis 27.3.2012, 15:05
ну или просто: month = (string)monthes[m3.Groups[2].Value];

Автор: techPro 1.4.2012, 03:29
Класс Dictionary<TKey, TValue> в большинстве случаев способен заменить класс Hashtable. С момента выхода 2 версии .NET Framework Microsoft рекомендует использовать обобщённые классы (в данном случае Dictionary<TKey, TValue>) по причине их большего удобства, типовой безопасности и более высокой производительности

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)