我正在使用实现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
类的模式?
答案 0 :(得分:2)
如果格式字符串无效,您可以从实现中抛出;请参阅IFormattable
示例代码中的示例。
https://msdn.microsoft.com/en-us/library/system.iformattable(v=vs.110).aspx#Anchor_3
注意在switch语句的末尾,它是如何抛出默认情况的。
或者,只尝试使用一个字符。 (5).ToString("A")
抛出。
请注意IFormattable
的其他要求:
"G"
,这意味着某种通用表示。"G"
。IFormatProvider
,并在这种情况下使用CultureInfo.CurrentCulture
。