powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Enum & Generics
18 сообщений из 18, страница 1 из 1
Enum & Generics
    #38986027
Добрый день!

Небольшая проблемка. Не подскажите как перебрать элементы 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
Enum & Generics
    #38986052
Фотография 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
Enum & Generics
    #38986062
Красота! Спасибо большое!
...
Рейтинг: 0 / 0
Enum & Generics
    #38986088
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Enum & Generics
    #38986101
ЕвгенийВТак можно что угодно впихнуть, любой тип. энумы не могут быт в ограничениях обобщенных типов. Но можно немного приблизиться так
Код: 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
Enum & Generics
    #38986188
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
Enum & Generics
    #38986194
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Skip
.Take
...
Рейтинг: 0 / 0
Enum & Generics
    #38986472
Shocker.Pro.Skip
.Take

А для фреймворка 2.0 такие методы есть?
...
Рейтинг: 0 / 0
Enum & Generics
    #38986476
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, это методы линка, с 3.5
...
Рейтинг: 0 / 0
Enum & Generics
    #38986495
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
Enum & Generics
    #38987182
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro.Skip
.Take
А пейджинг?
...
Рейтинг: 0 / 0
Enum & Generics
    #38987201
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Shocker.Pro.Skip
.Take
А пейджинг?
И чтобы последний элемент всегда попадал в результат, даже если последняя страница короткая. Можно этосделать чисто на Линке, без доп. кода?
...
Рейтинг: 0 / 0
Enum & Generics
    #38988115
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Enum & Generics
    #38988262
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кто-то юзает внешний счётчик для форича, то что-то тут не так...
...
Рейтинг: 0 / 0
Enum & Generics
    #38988268
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZhV,

я не знаю, что у вас написано, но позволю себе сделать предположение, что можно обойтись каким-нибудь линковским Select. Можно с захватом стринг билдера в делегат.
...
Рейтинг: 0 / 0
Enum & Generics
    #38988269
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112 Можно с захватом стринг билдера в делегат.
Точнее, в лямбду селекта.
...
Рейтинг: 0 / 0
Enum & Generics
    #38988317
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Enum & Generics
    #38988355
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZhVЛучше один раз увидеть работающий код, чем услышать сотню умных бла-бла-бла


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


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