Enum ToString以数字形式显示

本文关键字:显示 字形 数字 ToString Enum | 更新日期: 2023-09-27 18:01:18

我有一个enum

private enum TimeUnit
{      
  Day,
  Month,
  Year
}

我正在填充一个描述:

return string.Concat(unit, "(s)");

其中unit为TimeUnit。大多数情况下,这工作得很好,显示"天(s)",但在特定的服务器上,它显示为"1(s)"。"

是什么原因导致的?

Enum ToString以数字形式显示

尝试使用enumt . getname ()

还具有更安全的优点,因为它需要:

  • 传入的值不为空。
  • 您传入的值的类型是枚举实际上可以用作其基础类型的类型,或者是枚举本身的类型。它使用GetType对值进行检查。

您应该使用ToString:

进行适当的格式化
return string.Concat(unit.ToString("F"), "(s)");

因为Enum是数字枚举,可选地用字符串表示(考虑它们的别名)

MSDN显示:

此方法的工作原理与通用格式字符"G"相同指定。也就是说,如果FlagsAttribute未应用于此枚举类型,并且有一个命名常量等于的值在此实例中,返回值是包含名称的字符串常数的。如果应用了FlagsAttribute并且存在一个或多个命名常量的组合,等于this的值实例,则返回值是一个包含以分隔符分隔的常量名称列表。否则,返回值是this的数值的字符串表示形式实例。

所以理想情况下,在你的情况下,它应该工作得很好(考虑到FlagsAttribute没有应用,并且有一个命名常量等于这个实例的值)。你能说说这些盒子之间的区别吗?

同时,试着给出明确的数字。

private enum TimeUnit
{      
  Day = 1,
  Month = 2,
  Year = 3
}