F#字符串操作符在guid上爆炸

mfe*_*old 3 f#

我的印象是,在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,问题是其他对象会给我带来同样的麻烦吗?我应该避免使用字符串运算符吗?在我的情况下,对象可能是任何东西

Bri*_*ian 8

这是(将)在下一个版本中修复的错误.

(一般来说,它应该工作;错误是因为System.Guid不响应IFormattable"G"说明符,尽管IFormattable的文档说所有实现者都必须实现"G"说明符.所以它实际上有点System.Guid中的一个错误,但F#库将在下一个版本的"字符串"运算符中解决此错误.

简而言之,您现在可以安全地使用此操作员,但Guid除外,但很快就会修复.在此期间你可以使用特殊情况的Guid.)

  • 对.(如果拥有System.Guid的团队已经设法在过去7年中将此明显错误发送了5次,那么他们现在似乎不太可能会修复它.) (2认同)