我的印象是,在F#中,以下两行应该给出相同的结果:
let a = string v
let a = v.ToString()
Run Code Online (Sandbox Code Playgroud)
暗示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:
Run Code Online (Sandbox Code Playgroud)
我当然可以单独处理Guids,问题是其他对象会给我带来同样的麻烦吗?我应该避免使用字符串运算符吗?在我的情况下,对象可能是任何东西
这是(将)在下一个版本中修复的错误.
(一般来说,它应该工作;错误是因为System.Guid不响应IFormattable"G"说明符,尽管IFormattable的文档说所有实现者都必须实现"G"说明符.所以它实际上有点System.Guid中的一个错误,但F#库将在下一个版本的"字符串"运算符中解决此错误.
简而言之,您现在可以安全地使用此操作员,但Guid除外,但很快就会修复.在此期间你可以使用特殊情况的Guid.)