Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Enum & Generics / 18 сообщений из 18, страница 1 из 1
17.06.2015, 16:45
    #38986027
Enum & Generics
Добрый день!

Небольшая проблемка. Не подскажите как перебрать элементы enum-а с помощью Generic.

Вот написал код:


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
using System;
using System;
using System.Collections.Generic;
using System.Text;
namespace tst_enum
{
    class Program
    {
        enum A
        { 
            A1,
            A2
        }

        enum B
        { 
            B1,
            B2,
            B3
        }

        static void Main(string[] args)
        {
            PrintStringGeneric<A>();
            PrintStringGeneric<B>();
        }

        static void PrintStringGeneric<T>()
        {
            for (int i = 0; i < Enum.GetValues(typeof(T)).Length; i++)
            {
                Console.WriteLine("<Здесь что-то надо написать>");
            }
        }
    }
}




Не соображу, что нужно писать внутри Console.WriteLine. Ожидаю получить результат:
A1
A2
B1
B2
B3.
Знатоки подскажите пожалуйста.
...
Рейтинг: 0 / 0
17.06.2015, 17:03
    #38986052
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
Код: c#
1.
2.
3.
4.
5.
6.
7.
    static void PrintStringGeneric<T>()
    {
      foreach (var i in Enum.GetValues(typeof(T)))
      {
        Console.WriteLine(i.ToString());
      }
    }
...
Рейтинг: 0 / 0
17.06.2015, 17:07
    #38986062
Enum & Generics
Красота! Спасибо большое!
...
Рейтинг: 0 / 0
17.06.2015, 17:24
    #38986088
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
Shocker.Pro
Код: c#
1.
2.
3.
4.
5.
6.
7.
    static void PrintStringGeneric<T>()
    {
      foreach (var i in Enum.GetValues(typeof(T)))
      {
        Console.WriteLine(i.ToString());
      }
    }


Так можно что угодно впихнуть, любой тип. энумы не могут быт в ограничениях обобщенных типов. Но можно немного приблизиться так
Код: c#
1.
2.
3.
4.
5.
6.
7.
    static void PrintStringGeneric<T>() where T: struct IComparable, IFormattable, IConvertible
    {
      foreach (var i in Enum.GetValues(typeof(T)))
      {
        Console.WriteLine(i.ToString());
      }
    }


int конечно пройдет, но string уже нет
...
Рейтинг: 0 / 0
17.06.2015, 17:37
    #38986101
Enum & Generics
ЕвгенийВТак можно что угодно впихнуть, любой тип. энумы не могут быт в ограничениях обобщенных типов. Но можно немного приблизиться так
Код: c#
1.
2.
3.
4.
5.
6.
7.
    static void PrintStringGeneric<T>() where T: struct IComparable, IFormattable, IConvertible
    {
      foreach (var i in Enum.GetValues(typeof(T)))
      {
        Console.WriteLine(i.ToString());
      }
    }


int конечно пройдет, но string уже нет

А в чем сермяжная правда сих строк?
...
Рейтинг: 0 / 0
17.06.2015, 18:34
    #38986188
Enum & Generics
Shocker.Pro
Код: c#
1.
2.
3.
4.
5.
6.
7.
    static void PrintStringGeneric<T>()
    {
      foreach (var i in Enum.GetValues(typeof(T)))
      {
        Console.WriteLine(i.ToString());
      }
    }



А вот еще вопрос - если я захочу вывести элементы не все, а с какого-то, как нужно переделать код?!
...
Рейтинг: 0 / 0
17.06.2015, 18:38
    #38986194
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
.Skip
.Take
...
Рейтинг: 0 / 0
18.06.2015, 09:02
    #38986472
Enum & Generics
Shocker.Pro.Skip
.Take

А для фреймворка 2.0 такие методы есть?
...
Рейтинг: 0 / 0
18.06.2015, 09:04
    #38986476
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
нет, это методы линка, с 3.5
...
Рейтинг: 0 / 0
18.06.2015, 09:25
    #38986495
Enum & Generics
Shocker.Proнет, это методы линка, с 3.5
Жаль - нужно что-то для 2.0 сделать. Ограничен подобными рамками. Я сделал подобную функцию
Код: c#
1.
2.
3.
4.
5.
6.
7.
        static void PrintStringGeneric<T>(int start, int end)
        {
            for (int i = start; i <= end; i++)
            {
                Console.WriteLine(Enum.GetValues (typeof (T)).GetValue (i));
            }
        }


Запускаю например с помощью
Код: c#
1.
PrintStringGeneric<B>((int)B.B2, (int)B.B3);


Спасибо - с вашей помощью решил задачу.
...
Рейтинг: 0 / 0
18.06.2015, 17:07
    #38987182
Alexey2112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
Shocker.Pro.Skip
.Take
А пейджинг?
...
Рейтинг: 0 / 0
18.06.2015, 17:25
    #38987201
Alexey2112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
Alexey2112Shocker.Pro.Skip
.Take
А пейджинг?
И чтобы последний элемент всегда попадал в результат, даже если последняя страница короткая. Можно этосделать чисто на Линке, без доп. кода?
...
Рейтинг: 0 / 0
19.06.2015, 14:45
    #38988115
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
Shocker.Pro
Код: c#
1.
2.
3.
4.
5.
6.
7.
    static void PrintStringGeneric<T>()
    {
      foreach (var i in Enum.GetValues(typeof(T)))
      {
        Console.WriteLine(i.ToString());
      }
    }


Классная идея. Спасибо.
Я позволил себе немного модифицировать
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
        public static string EnumIntTypeToString(Type entype, bool a_hex)
        {
            StringBuilder lsb = new StringBuilder();
            int j = 0;
            try
            {
                lsb.Append(entype.ToString());
                Type ltt = Enum.GetUnderlyingType(entype);
                if (ltt.ToString().ToLower().IndexOf("int") < 0)
                { j = -1; lsb.AppendLine(" - Enum Type not int"); }
            }
            catch { j = -2; lsb.AppendLine(" - Not Enum Type"); }
            if (j >=0) 
           { 
               lsb.AppendLine(" - Enum List : ");
               foreach (var en in Enum.GetValues(entype))
               {  
                  lsb.Append( (++j).ToString().PadRight(3) + " " +
                              (a_hex ? "0x" + ((int)en).ToString("X4") : ((int)en).ToString().PadRight(5) ) + 
                               " " + en.ToString() +"\r\n");
               }
               if (j > 0) { lsb.Append("\r\n"); }
           }
            return lsb.ToString();
        }
...
Рейтинг: 0 / 0
19.06.2015, 15:47
    #38988262
Alexey2112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
Если кто-то юзает внешний счётчик для форича, то что-то тут не так...
...
Рейтинг: 0 / 0
19.06.2015, 15:50
    #38988268
Alexey2112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
ZhV,

я не знаю, что у вас написано, но позволю себе сделать предположение, что можно обойтись каким-нибудь линковским Select. Можно с захватом стринг билдера в делегат.
...
Рейтинг: 0 / 0
19.06.2015, 15:51
    #38988269
Alexey2112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
Alexey2112 Можно с захватом стринг билдера в делегат.
Точнее, в лямбду селекта.
...
Рейтинг: 0 / 0
19.06.2015, 16:33
    #38988317
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
Alexey2112ZhV,

я не знаю, что у вас написано...
Ну так и не трудитесь.
Лучше один раз увидеть работающий код, чем услышать сотню умных бла-бла-бла

А внешний нумератор понадобился всего лишь для красивой нумерации строк
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ExifLibrary.ExifTag - Enum List : 
1   0x0100 ImageWidth
2   0x0101 ImageLength
3   0x0102 BitsPerSample
4   0x0103 Compression
5   0x0106 PhotometricInterpretation
6   0x010E ImageDescription
7   0x010F Make
8   0x0110 Model
....
259 0x1001 RelatedImageWidth
260 0x1002 RelatedImageLength
261 0x8298 ThumbnailCopyright
...
Рейтинг: 0 / 0
19.06.2015, 16:59
    #38988355
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Enum & Generics
ZhVЛучше один раз увидеть работающий код, чем услышать сотню умных бла-бла-бла


Ровно до тех пор, пока не придется переписывать работающий код, услышав это самое умное бла-бла-бла. Иногда это бывает мучительно больно
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Enum & Generics / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]