【问题标题】:Is there any way to pull Enum number(int) from a variable which gets an Enum element from a list?有没有办法从一个从列表中获取 Enum 元素的变量中提取 Enum number(int) ?
【发布时间】: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


【解决方案1】:

我找到了问题的答案:

首先,List&lt;string&gt; 对我来说是一件坏事,所以我创建了 List :

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

            };

然后,我的变量var randomElemnt = Products.RandomElement(); 成为非字符串枚举成员 之后我能够通过另一个变量提取 enum int var randomElmntId = (int)randomElmnt; 虽然仍然可以使用randomElmnt

感谢大家的贡献,让我来到这个解决方案。

【讨论】:

    【解决方案2】:

    下面的代码展示了如何将数字转换为字符串和字符串转换为数字:

            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();
    
            }
    

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      相关资源
      最近更新 更多