Enum ToString显示为数字

时间:2013-02-27 12:28:51

标签: c# enums tostring

我有一个枚举

private enum TimeUnit
{      
  Day,
  Month,
  Year
}

我正在填写描述:

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

单位是TimeUnit。大多数情况下这工作正常并显示“Days(s)”但是在特定服务器上它显示为“1(s)”

导致这种情况的原因是什么?

4 个答案:

答案 0 :(得分:7)

尝试使用Enum.GetName()

它还具有safer的优势,因为它需要:

  • 您传入的值不为空。
  • 您传入的值是枚举实际可以使用的类型,因为它是基础类型或枚举本身的类型。它在值上使用GetType来检查它。

答案 1 :(得分:3)

您应该使用ToString

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

答案 2 :(得分:0)

因为Enum是数字枚举optionnaly表示字符串(将它们视为别名)

答案 3 :(得分:0)

MSDN说:

  

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

理想情况下,在你的情况下它应该工作正常(考虑到FlagsAttribute未应用并且有一个命名常量等于此实例的值)。你能提一下盒子之间的区别吗?

另外,请尝试给出明确的数字。

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