LookUp для двух значений enum - PullRequest
0 голосов
/ 06 марта 2020

[C #] Привет, Какое лучшее решение, чтобы иметь что-то вроде поиска или dict, который будет соответствовать ключу int для двух значений, представленных перечислениями (то есть что-то вроде Dict<int, enum, enum>)? Мне нужно взять эти два перечисления и найти для них связанный int. Я ищу лучший подход. Я обнаружил, что, возможно, создание нового объекта будет представлять эти два перечисления или использовать там кортеж. Я также нашел что-то похожее на структуру Lookup, но я до сих пор не знаю, какой будет лучший подход, потому что я свободен shie

1 Ответ

0 голосов
/ 06 марта 2020

Если ваше перечисление является целым числом, вы можете просто разыграть как таковое

int enumNumber = (int) exampleenum.keyA;

, поэтому для перечисленного ниже enumNumber будет приведено как 1.

private enum exampleenum
{
    KeyA = 1,
    KeyB = 2,
    KeyC = 3,
    KeyD = 4
}

Словарь не может иметь два значения, это пара ключ-значение (два). Чтобы использовать словарь с двумя значениями, вам нужно будет создать пользовательский объект для двух перечислений как.

Я не уверен, с какой производительностью это может повлиять на производительность, вы можете вместо этого изучить использование Tuple.

Пример объекта

class EnumObject
{
    public Enum Enum1 { get; set; }
    public Enum Enum2 { get; set; }
}

Заполнение словаря

        Dictionary<int, EnumObject> dic = new Dictionary<int, EnumObject>()
        {
            {1, new EnumObject() { Enum1 = exampleenum.KeyA, Enum2 = exampleenum.KeyB }},
            {2, new EnumObject() { Enum1 = exampleenum.KeyA, Enum2 = exampleenum.KeyC }},
            {3, new EnumObject() { Enum1 = exampleenum.KeyA, Enum2 = exampleenum.KeyD }}
        };

Затем вы можете использовать linq для поиска значения и ввода ключа.

        int Key = dic.FirstOrDefault(x => x.Value == new EnumObject() { Enum1 = exampleenum.KeyA, Enum2 = exampleenum.KeyB }).Key;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...