Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передать энум в функцию 
:(
    Опции темы
Jade
Дата 24.2.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 18.10.2006
Где: Киев

Репутация: нет
Всего: нет



Добрый вечер всем.
Возникла такая проблемка.
Прога работает с бд, со многими таблицами. В каждом запросе select нужно указать список полей для выбора.
Я задаю их энумом и делаю функцию, которая содержимое энума переводит в строчку, через запятую (списки колонок достаточно обширны, и часто меняются при разработке, поэтому тупо в строчку писать напряжно)
вот так:

Код

private enum MidHomeColumns
        {
            cl_state_name,        //страна
            mid_ter_c_name,        //территориальная единица
            mid_city_name,        //город            
            mid_street_name,            //название улицы

            mid_home_bud,        //дом
            mid_home_kvart,        //квартира
            mid_home_index,        //почтовый индекс

            mid_home_tel1,        //телефоны
            mid_home_tel2
        }
        private string GetMidHomeColumnsList(string prefix)
        {
            string result = "";

            foreach (MidHomeColumns ac in Enum.GetValues(typeof(MidHomeColumns))) //проходим все колонки в перечислении
            {
                result = result + ", " + prefix + "." + ac.ToString();
            }
            result = result.Remove(0, 1); //удаляем первую запятую


            return result;
        }


потом эту фунцию вызываю уже при работе с непосредственно бд.

Но теперь имея 5 таких списков, для каждого приходится писать одинаковую функцию, переводящую список в стринг.
Вопрос - как имея несколько таких энумов, использовать для всех одну и ту же функцию, передав например название энума в нее?
Или может использовать что-то попроще для такой цели?

Заранее благодарен за ответы.
PM MAIL ICQ   Вверх
chip_and_dayl
Дата 24.2.2010, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: нет
Всего: 9



А что мешает передавать список Енум в ф-цию как параметр?


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
chip_and_dayl
Дата 24.2.2010, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: нет
Всего: 9



chip_and_dayl
Извиняюсь, передача Енум как параметр проблематично


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Jade
Дата 24.2.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 18.10.2006
Где: Киев

Репутация: нет
Всего: нет



(был ответ на первый пост)

Это сообщение отредактировал(а) Jade - 24.2.2010, 20:02
PM MAIL ICQ   Вверх
KelTron
Дата 24.2.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Код

private string GetMidHomeColumnsList(string prefix, string enumName)
        {
            string result = "";

            foreach (MidHomeColumns ac in Enum.GetValues(Type.GetType(enumName)))
            {
                result = result + ", " + prefix + "." + ac.ToString();
            }
            result = result.Remove(0, 1); //удаляем первую запятую


            return result;
        }

...
GetMidHomeColumnsList("111", "MidHomeColumns");


Добавлено через 1 минуту и 18 секунд
Ну и название функции нужно тоже поменять...

Добавлено через 9 минут и 28 секунд
Всё таки этот вариант неудобен, нужно указывать полное имя типа вместе с namespace. 
Лучше так:
Код

private static string GetEnumColumnsList(string prefix, Type enumType)
{
    string result = "";

    foreach (var ac in Enum.GetValues(enumType))
    {
        result = result + ", " + prefix + "." + ac.ToString();
    }
    result = result.Remove(0, 1); 


    return result;
}

GetEnumColumnsList("", typeof(MidHomeColumns));



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Jade
Дата 24.2.2010, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 18.10.2006
Где: Киев

Репутация: нет
Всего: нет



Ура smile
Да, спасибо. Надо передавать именно тип. Сам не додумался, надо чаще отдыхать от работы smile
Успехов!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.