我的印象是,在F#中,以下两行应该给出相同的结果:
let a = string v
let a = v.ToString()
暗示v是一个对象。事实证明,如果v是System.Guid,则第一行只会引发异常:
System.FormatException occurred
Message="Format String can be only \"D\", \"d\", \"N\", \"n\", \"P\", \"p\", \"B\" or \"b\"."
Source="mscorlib"
StackTrace:
at System.Guid.ToString(String format, IFormatProvider provider)
InnerException:
我当然可以单独处理Guids,问题是其他对象会给我带来同样的麻烦吗?我应该避免使用字符串运算符吗? 在我的情况下,对象可能是任何东西
答案 0 :(得分:8)
这是(将会)在下一个版本中修复的错误。
(一般情况下,它应该有效;错误是因为System.Guid不响应IFormattable“G”说明符,尽管IFormattable的文档说所有实现者都必须实现“G”说明符。所以它实际上是System.Guid中的一个错误,但是F#库将在下一个版本的“字符串”运算符中解决这个错误。
简而言之,您现在可以安全地使用此操作员,但Guid除外,但很快就会修复。在此期间,您可以使用特殊情况Guid。)