11

我有一个枚举

private enum TimeUnit
{      
  Day,
  Month,
  Year
}

我正在用以下内容填充描述:

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

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

什么会导致这个?

4

4 回答 4

9

尝试使用Enum.GetName()

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

  • 您传入的值不为空。
  • 您传入的值是枚举实际上可以用作其基础类型的类型,或者是枚举本身的类型。它在值上使用 GetType 来检查这一点。
于 2013-02-27T12:32:15.553 回答
4

您应该使用适当的格式ToString

return string.Concat(unit.ToString("F"), "(s)");
于 2013-02-27T12:31:10.197 回答
0

因为Enum数字枚举选项是用字符串表示的(认为它们是别名)

于 2013-02-27T12:30:57.660 回答
0

MSDN说:

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

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

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

private enum TimeUnit
{      
  Day = 1,
  Month = 2,
  Year = 3
}
于 2013-02-27T12:41:38.397 回答