将泛型方法中的枚举值转换为 int

问题描述

我创建了一个通用方法。类型参数可以是任何枚举:

private AdditionalFields GetAdditionalFields<T>(params T[] fields) where T : struct,Enum
{
  var fieldTextList = new List<string>();
  foreach ( var field in fields )
  {
    fieldTextList.Add($"F{(int)field}");   // <- Error here
  }
  // ... do logic
  return ...
}

当我尝试将枚举值转换为整数时,出现编译器错误“无法将类型 'T' 转换为 'int'。

谁能解释一下,为什么会这样? T 始终是一个枚举,因此应该能够转换为 int - 或不?

解决方法

我认为,最好使用 enum 特定的格式字符串来获取 enum 的整数表示(一般意义上的整数,不仅仅是 int32)

fieldTextList.Add($"F{field:D}");

您可以在此处找到有关枚举格式说明符的更多信息:https://docs.microsoft.com/en-us/dotnet/standard/base-types/enumeration-format-strings#d-or-d

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...