C# - Если задано имя перечисления в виде строки, вернуть все значения перечисления - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть список имен перечислений. Этот список может быть более наглядным, чтобы иметь путь перечисления, например Library.Base.Enums. {EnumName}, если это помогает. Перечисления могут находиться в разных папках, например MyEnumCategories, которые могут храниться в папке Library / Base / Enums / Category / и MyEnumCities может быть в библиотеке / базе / перечисления / местоположения /. У меня есть растущий список имен перечислений, и мне нужно иметь возможность получить из списка все значения, хранящиеся в перечислениях. Мне нужно вернуть все значения перечислений, как показано ниже:

List<string> enumNames=["MyEnumCategories","MyEnumCities"]
List<string> values = new List<strings>

public enum MyEnumCategories
{
    Service = 0,
    Corporate = 1,
    Enterprise = 2,
    AllSites = 3,
    IndividualSites = 4,
    Site = 5,
    Notification = 6
}
public enum MyEnumCities
{
    Chicago= 0,
    Boston= 1,
    NewYork= 2,
    Denvor= 3,
    Austin= 4,
    Seattle= 5,
    SanFrancisco= 6
}

OUTPUT: values ​​= ["Service", "Corporate", "Enterprise", .... "Seattle", "SanFrancisco" ,]

1 Ответ

2 голосов
/ 28 апреля 2020

Быстро и просто с linq. Если вы хотите охватить несколько сборок или добавить нечувствительность к регистру или частичное совпадение, например, c, у вас будет несколько дополнительных битов для добавления.

var enumNames = new[] { "MyEnumCategories", "MyEnumCities" };
var enumTypes = Assembly.GetExecutingAssembly().GetTypes().Where(x => x.IsEnum && enumNames.Contains(x.Name));
var values = enumTypes.SelectMany(Enum.GetNames).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...