Есть ли способ вытащить номер Enum (int) из переменной, которая получает элемент Enum из списка?

Я пытаюсь сравнить элемент enum со значением базы данных; Сравнение имен (значение) работает нормально, но имена могут быть изменены, поэтому мне приходится сравнивать по идентификаторам, поэтому я присвоил номера каждому элементу перечисления;

Проверка сравнения включает в себя получение случайного элемента из списка некоторых (не всех) значений расширения строки указанного перечисления.

Есть ли способ получить присвоенный номер элемента или хотя бы индекс после установки случайной переменной (randomElemnt)?

Я попытался создать другую переменную

var randomElemntId = (ProductName)Enum.Parse(typeof(ProductName),randomElemnt);

Приведение к int также не дало желаемого результата.

Это мой пример перечисления со значением расширения строки.

//Value is a string extension
public enum ProductName
    {
        [Value("Product1")] Product1 = 2,
        [Value("Product2")] Product2 = 3,
        [Value("Product3")] Product3 = 4,
        [Value("Product4")] Product4 = 1,
        [Value("None")] None = 0
    }

Пример списка, который я использую. Обратите внимание, что присутствуют не все элементы перечисления; Переменная, которая получает случайный элемент списка

//contains some enum values
     var Products = new List<string>
            {
                ProductName.Product1.GetValue(),
                ProductName.Product2.GetValue(),
                ProductName.Product3.GetValue(),

            };

//returns random element from the list
var randomElemnt = Products.RandomElement();

Возможный дубликат Преобразование строки в перечисление в С#

Sinatr 17.05.2019 15:50

«Приведение к типу int также не дало желаемого результата». -- что вы привели к int? Строка или значение перечисления? (int)ProductName.Product3 вернется 4.

15ee8f99-57ff-4f92-890c-b56153 17.05.2019 16:23

@EdPlunkett Действительно, приведение значения перечисления дало мне необходимое целое число. Проблема в том, что я должен работать со строковой переменной (randomElmnt), которая не является опцией. Я должен немного перефразировать вопрос.

Maledictum 17.05.2019 16:42

@Maledictum Вы знаете, как анализировать строковое значение, чтобы получить перечисление. Но, возможно, перефразирование внесет ясность.

15ee8f99-57ff-4f92-890c-b56153 17.05.2019 16:43

Если ваш код должен учитывать имена, которые могут быть изменены, вы не можете поместить имена в код, если вы не генерируете код после каждого изменения. Некоторые ORM делают это.

Tom Blodget 17.05.2019 17:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я нашел ответ на свой вопрос:

Прежде всего, в моем случае List<string> было плохо, поэтому я создал List :

var Products = new List<ProductName>
            {
                ProductName.Product1,
                ProductName.Product2,
                ProductName.Product3,

            };

Затем моя переменная var randomElemnt = Products.RandomElement(); стала нестроковым членом перечисления После этого я смог извлечь enum int через другую переменную var randomElmntId = (int)randomElmnt; Пока еще можно работать с randomElmnt

Спасибо всем за ваш вклад, который заставил меня прийти к этому решению.

Код ниже показывает, как преобразовать число в строку и строку в число:

        public enum ProductName
        {
            Product1 = 2,
            Product2 = 3,
            Product3 = 4,
            Product4 = 1,
            None = 0
        }

        static void Main(string[] args)
        {
            Random rand = new Random();
            List<ProductName> products = Enumerable.Range(0,10).Select(x => (ProductName)rand.Next(0,5)).ToList();
            string[] names = products.Select(x => x.ToString()).ToArray();

        }

Другие вопросы по теме