Свойства вложенного класса c класса - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть этот вложенный статус c класс

public static class UserRoles
{
    public static class Administrator
    {
        public static string Code => "ADMIN";
        public static string Title => "Administrator";
    }

    public static class ClientUser
    {
        public static string Code => "CU";
        public static string Title => "Client User";
    }

    public static class Driver
    {
        public static string Code => "DR";
        public static string Title => "Driver";
    }
}

Я пытаюсь перебрать свойства UserRoles, но с треском провалился. Я попытался использовать System.Reflection, который, как мне кажется, является единственным подходящим подходом для решения проблемы.

Я уже пытался использовать GetFields с привязками и GetProperties, но, к сожалению, он не работает.

var fields = myType.GetFields(BindingFlags.Static | BindingFlags.NonPublic);

Я уже проверил другие вопросы, но я не нашел ни одного, который бы указывал c на этот самый c и общий случай. Пожалуйста, дайте мне знать, если это дубликат чего-либо.

Любая помощь будет по-настоящему признательна.

1 Ответ

1 голос
/ 16 февраля 2020

Для этого можно использовать метод GetNestedTypes

var userRoles = typeof(UserRoles).GetNestedTypes().SelectMany(t => t.GetProperties());

Приведенный выше код возвращает перечисление свойств для каждого вложенного класса в UserRoles классе.

Но если вы хотите хранить некоторую информацию, такую ​​как набор ключей и значений, Dictionary<TKey,TValue> - лучший выбор, а не вложенные классы c. Посмотрите на пример ниже

public enum UserType
{
    Administrator,
    ClientUser,
    Driver
}

public class UserInfo
{
    public string Code { get; set; }
    public string Title { get; set; }
}
...
var roles = new Dictionary<UserType, UserInfo>
{
    { UserType.Administrator, new UserInfo { Code = "ADMIN", Title = "Administrator" } },
    { UserType.Driver, new UserInfo { Code = "DR", Title = "Driver" } }
    //and so on
};
//get admin title
var title = roles[UserType.Administrator].Title;
...