【发布时间】:2019-05-17 13:42:43
【问题描述】:
我正在尝试将枚举元素与数据库值进行比较; 比较名称(值)可以正常工作,但名称需要更改,所以我必须按 ID 进行比较,这就是我为每个枚举元素分配数字的原因;
测试比较包括从所述枚举的一些(不是全部)字符串扩展值列表中获取随机元素。
在设置随机变量(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 事实上,转换枚举值给了我所需的 int。问题是,我必须使用不是选项的字符串变量(randomElmnt)进行操作。我必须重新表述一下这个问题。
-
@Maledictum 你知道如何解析字符串值来获取枚举。但也许改写一下会澄清。
-
如果您的代码需要考虑名称会发生变化,那么您不能将名称放入代码中,除非您在每次更改后生成代码。一些 ORM 会这样做。
标签: c# list enums extension-methods