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


Автор: Jade 24.2.2010, 19:16
Добрый вечер всем.
Возникла такая проблемка.
Прога работает с бд, со многими таблицами. В каждом запросе 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 таких списков, для каждого приходится писать одинаковую функцию, переводящую список в стринг.
Вопрос - как имея несколько таких энумов, использовать для всех одну и ту же функцию, передав например название энума в нее?
Или может использовать что-то попроще для такой цели?

Заранее благодарен за ответы.

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

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

Автор: Jade 24.2.2010, 20:01
(был ответ на первый пост)

Автор: KelTron 24.2.2010, 20:30
Код

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));

Автор: Jade 24.2.2010, 20:45
Ура smile
Да, спасибо. Надо передавать именно тип. Сам не додумался, надо чаще отдыхать от работы smile
Успехов!

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