powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как преобразовать Type в Enum?
8 сообщений из 8, страница 1 из 1
Как преобразовать Type в Enum?
    #36547426
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Подскажите, как преобразовать Type в Enum. Следующий код вызывает ошибку:

Код: plaintext
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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
using System;
using System.Reflection;
using System.ComponentModel;

enum ColorFirst
{ 
    [DescriptionAttribute("красный")]
    Red, 
    [DescriptionAttribute("зелёный")]
    Green, 
    [DescriptionAttribute("синий")]
    Blue 
}

enum ColorSecond
{ 
    [DescriptionAttribute("Жёлтый")]
    Yellow, 
    [DescriptionAttribute("белый")]
    White, 
    [DescriptionAttribute("чёрный")]
    Black 
}
public static class EnumUtils
{
    public static string GetString(this Enum e)
    {
        var s = e.ToString();
        var fi = e.GetType().GetField(s);
        var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(
            typeof(DescriptionAttribute), false);
        if (attributes.Length > 0)
            s =  attributes[0].Description;
        return s;
    }
}

public static class Program
{
    public static void Main(string[] args)
    {
         Console.WriteLine("EnumValues: {0}", ord, GetEnumValues("ColorFirst"));
    }

    public string GetEnumValues(string enumName)
    {
	string enumValueList=string.Empty;
	Type enumType = Type.GetType(enumName); 
	foreach (int ord in Enum.GetValues(enumType))
        {
		enumValueList+=" "+((enumType) ord).GetString()
	}

    }
}

Возможно ли вообще такое?
...
Рейтинг: 0 / 0
Как преобразовать Type в Enum?
    #36547503
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, главное чуточку желания :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// Получить описание из перечисления
string desc = ColorFirst.Blue.ToDescription();

// Получить перечисление из описания
ColorFirst fst = desc.ToEnum<ColorFirst>();

// Список описаний через разделитель " "
string enumValueList = Enum.GetValues(typeof(ColorFirst)).Cast<ColorFirst>().Select(d => d.ToDescription()).Aggregate((a, b) => a + " " + b);

EnumExtensions
Код: plaintext
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.
/// <summary>
/// Расширяющие методы перечислений
/// </summary>
public static class EnumExtensions
{
    /// <summary>
    /// Преобразование перечисления в текстовое описание
    /// </summary>
    /// <param name="value"></param>
    /// <returns>Возвращает текстовое описание поля перечисления</returns>
    public static string ToDescription(this Enum value)
    {
        var da = (DescriptionAttribute[])(value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false));
        return da.Length > 0 ? da[0].Description : value.ToString();
    }

    /// <summary>
    /// Преобразование текстового описания в перечисление
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="value"></param>
    /// <returns>Возвращает поле перечисления</returns>
    public static T ToEnum<T>(this string value)
    {
        foreach (T enumValue in Enum.GetValues(typeof(T)))
        {
            DescriptionAttribute[] da = (DescriptionAttribute[])(typeof(T).GetField(enumValue.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false));
            if (da.Length > 0 && da[0].Description == value)
            {
                return enumValue;
            }
        }
        return default(T);
    }
}
...
Рейтинг: 0 / 0
Как преобразовать Type в Enum?
    #36547754
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,

Может я не до конца понял.
На входе строка (название Enum'a), её я преобразую в Type, через Type мне нужно получить все возможные значения Enum'a.

Приведённый выше пример вроде не позволяет этого сделать.
...
Рейтинг: 0 / 0
Как преобразовать Type в Enum?
    #36547772
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LimonadПриведённый выше пример вроде не позволяет этого сделать.
А если подумать?

Код: plaintext
Array values = Enum.GetValues("зелёный".ToEnum<ColorFirst>().GetType());
...
Рейтинг: 0 / 0
Как преобразовать Type в Enum?
    #36547781
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУLimonadПриведённый выше пример вроде не позволяет этого сделать.
А если подумать?

Код: plaintext
Array values = Enum.GetValues("зелёный".ToEnum<ColorFirst>().GetType());


в моём случае я не знаю, что
ToEnum<ColorFirst>

не знаю, что ColorFirst
...
Рейтинг: 0 / 0
Как преобразовать Type в Enum?
    #36547789
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данила, опять ты со своим линком в бочке затычка. У автора же в тесте к задаче имя типа строкой задается, а ты кастишь к заранее указанному типу.


Автор, поменяй пару букв в своем цикле и все заработает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
		public static string GetEnumValues(string enumName)
		{
			string enumValueList = string.Empty;
			Type enumType = Type.GetType(enumName, true, true);
			foreach (object ord in Enum.GetValues(enumType))
			{
				enumValueList += " " + ((Enum)ord).GetString();
			}
			return enumValueList;
		}
...
Рейтинг: 0 / 0
Как преобразовать Type в Enum?
    #36547809
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зыДанила, опять ты со своим линком в бочке затычка. У автора же в тесте к задаче имя типа строкой задается, а ты кастишь к заранее указанному типу.
Линк тут не при чем, зыня, афтар просто криво объясняет:

автор На входе строка (название Enum'a) , её я преобразую в Type, через Type мне нужно получить все возможные значения Enum'a.
Я так понял, что он имел ввиду строку (атрибут). То есть, имея тестовый атрибут, распарсить в енум, ну и дальше по задаче.

Limonadв моём случае я не знаю, что
ToEnum<ColorFirst>

не знаю, что ColorFirst

Дык, в чём проблема-то

Код: plaintext
Array values = Enum.GetValues(Type.GetType("MySpace.ColorFirst"));

?

P.S. А проблема вся походу кроется в том, что автор неймспейс забыл указать в хардкоде
...
Рейтинг: 0 / 0
Как преобразовать Type в Enum?
    #36549174
Limonad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,

Спасибо, всем!!!
неправильно указывал, путь до сборки ((((
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как преобразовать Type в Enum?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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