Я пытаюсь сравнить элемент 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();
«Приведение к типу int также не дало желаемого результата». -- что вы привели к int? Строка или значение перечисления? (int)ProductName.Product3
вернется 4
.
@EdPlunkett Действительно, приведение значения перечисления дало мне необходимое целое число. Проблема в том, что я должен работать со строковой переменной (randomElmnt), которая не является опцией. Я должен немного перефразировать вопрос.
@Maledictum Вы знаете, как анализировать строковое значение, чтобы получить перечисление. Но, возможно, перефразирование внесет ясность.
Если ваш код должен учитывать имена, которые могут быть изменены, вы не можете поместить имена в код, если вы не генерируете код после каждого изменения. Некоторые ORM делают это.
Я нашел ответ на свой вопрос:
Прежде всего, в моем случае 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();
}
Возможный дубликат Преобразование строки в перечисление в С#