【发布时间】:2017-03-29 18:36:20
【问题描述】:
Enum.ToString(string) 不支持直接使用精度说明符,例如 X2 或 D5 来对数值应用填充。 Formattings like ToString("X") or ToString("D") are implemented and well documented。当然,我可以在之前明确地将其转换为int,因此可以利用为整数实现的格式说明符将其转换为填充字符串。
我想知道是否有一些直接支持枚举的这种功能而无需强制转换它们。乍一看,这似乎很奇怪,因为它不像整数或其他数字类型那样直接实现。但也许我遗漏了一些更重要的东西,可以明确地解释它不是针对枚举做的?
public enum Number
{
Ten = 10
}
Console.WriteLine(Number.Ten); //OK: Ten
Console.WriteLine(Number.Ten.ToString()); //OK: Ten
Console.WriteLine(Number.Ten.ToString("D")); //OK: 10
Console.WriteLine(Number.Ten.ToString("D5")); //Expected 00010 - Failed: System.FormatException, can only be "G","g","X","x","F","f","D" or
Console.WriteLine(Number.Ten.ToString("X")); //OK: 0000000A
Console.WriteLine(Number.Ten.ToString("X2")); //Expected 0A - Failed: System.FormatException, can only be "G","g","X","x","F","f","D" or "d"
Console.WriteLine(10.ToString("X2")); //OK: 0A
Console.WriteLine(10.ToString("D5")); //OK: 00010
Console.WriteLine(((int)Number.Ten).ToString("X2"));//OK: 0A
来自accepted answer 的简短摘要:
它没有明确地存在,因为它已经根据底层类型的大小隐含地完成了。因此,如果您喜欢 X2 而不是 X8,只需使用 byte 作为基础类型,ToString("X") 的行为将类似于 ToString("X2")。
【问题讨论】:
-
这就是生活。如果您需要为特定枚举编写扩展方法,请考虑编写此方法。
-
我不确定您期望得到什么答案。只有语言设计者才能告诉你原因。可能是因为想要或需要做这件事有点奇怪。解决方案就是强制转换:
((int)Number.Ten).ToString("D5") -
就我个人而言,我很惊讶他们支持任何格式。这似乎是一个非常极端的案例。
-
与-1相反,我认为这是一个很好的问题,我希望我能得到答案。希望我的 +1 有所帮助。
-
@Marwie:因为它不是整数,它是一个枚举。这不是枚举的用途。