istudent Ответов: 1

Как создать универсальный метод, возвращающий словарь значений перечисления с отображаемым именем атрибута?


Мне нужно создать универсальный метод, который возвращает словарь значений перечисления с отображаемым именем атрибута.

Я также хотел бы посмотреть, можно ли это сделать как метод расширения для перечисления.

Что я уже пробовал:

Я могу сделать это только с помощью не общего метода.

internal IDictionary<int,string> GetPriorityTypes()
      {
          Dictionary<int, string> priorities = new Dictionary<int, string>();

          foreach (PriorityType item in Enum.GetValues(typeof(PriorityType)))
          {
              priorities.Add((int)item, item.GetDisplayName());
          }

          return priorities;
      }

Maciej Los

Что такое объявление и оформление класса PriorityType?

istudent

Это перечисление

MadMyche

Как насчет того, чтобы вы дали нам образец разметки для перечисления и то, что вы хотите для результатов этой функции, которую вы хотите?
Вы можете добавить эти элементы к этому вопросу через Improve Question виджет выше

1 Ответов

Рейтинг:
0

MadMyche

Как насчет метод расширения это может вернуть словарь int/string через любой тип перечисления, который он видит?

namespace System {
	public static class SysExtension {
		public static Dictionary<int, string> ToDictionary(this Enum EnumList) {
			Dictionary<int, string> ED = new Dictionary<int, string>();
			Type ET = EnumList.GetType();
			foreach (int i in Enum.GetValues(ET)) {
				ED.Add(i, Enum.GetName(ET, i));
			}
			return ED;
		}
	}
}
И тогда вы могли бы просто назвать это так...
Dictionary<int, string> x = new MyEnum().ToDictionary();

Вот полный сценарий, который я использовал для тестирования:
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1 {
	class Program {
		static void Main(string[] args) {

			Dictionary<int, string> x = new MyEnum().ToDictionary();
			foreach (KeyValuePair<int, string> kvp in x) {
				Console.WriteLine(string.Format("{0}:	{1}", kvp.Key, kvp.Value));
			}
			Console.ReadLine();
		}

		public enum MyEnum {
			Alpha = 1,
			Bravo = 2,
			Charlie = 3,
			Delta = 4,
			Echo = 5,
			Foxtrot = 6,
			Golf = 7,
			Hotel = 8,
			Juliet = 10,
		}
	}
}

namespace System {
	public static class SysExtension {

		public static Dictionary<int, string> ToDictionary(this Enum EnumList) {
			Dictionary<int, string> ED = new Dictionary<int, string>();
			Type ET = EnumList.GetType();
			foreach (int i in Enum.GetValues(ET)) {
				ED.Add(i, Enum.GetName(ET, i));
			}
			return ED;
		}
	}
}


istudent

Я хочу получить имя из атрибута отображения, сэр.

#realJSOP

Такого свойства нет ни в одном городе мира. Enum объект.