我正在创建一个带有实现System.IFormattable接口的类的API。为了帮助理解实现细节,我在mscorlib中对现有的IFormattable结构进行了一些测试。我对执行以下代码的结果感到惊讶:
string s1 = int.MaxValue.ToString("ABC", CultureInfo.CurrentCulture);
string s2 = DateTime.Now.ToString("ABC", CultureInfo.CurrentCulture);这两个方法调用都只是返回字符串"ABC",而不是对无法识别的格式字符串抛出异常。
当我尝试:
string s3 = int.MinValue.ToString("ABC", CultureInfo.CurrentCulture);它返回"-ABC" (?!!)
造成这种意外行为的原因是什么?对于所有的IFormattable类来说,这是一种应该遵循的模式吗?
发布于 2017-10-17 08:12:39
如果格式字符串无效,则允许从实现中抛出;请参阅IFormattable示例代码中的示例。
请注意,在switch语句的末尾,它是如何抛出默认情况的。
或者,试着只用一个角色。(5).ToString("A")抛出。
但是请注意IFormattable的其他要求:
"G",这意味着某种通用表示。"G"一样对待。IFormatProvider,并在这种情况下使用CultureInfo.CurrentCulture。https://stackoverflow.com/questions/46805459
复制相似问题