我正在尝试将enum元素与数据库值进行比较; 比较名称(值)可以很好地工作,但是名称可以更改,因此我必须按ID进行比较,这就是为什么我为每个枚举元素分配了数字;
测试比较包括从所述枚举的一些(不是全部)字符串扩展值的列表中获取随机元素。
设置随机变量(randomElemnt)后,是否有任何方法可以获取元素的分配编号或至少获得索引?
我试图创建另一个变量
var randomElemntId = (ProductName)Enum.Parse(typeof(ProductName),randomElemnt);
向int进行铸造也无法获得理想的结果。
这是我的示例枚举,其字符串扩展名为Value
//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();
答案 0 :(得分:1)
我找到了我的问题的答案:
首先,对于我来说,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
谢谢大家的贡献,这使我得以采用此解决方案。
答案 1 :(得分:0)
下面的代码显示了如何将数字转换为字符串以及将字符串转换为数字:
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();
}