2009-12-18 65 views
3

我下的印象是,在F#下面兩行應該給予相同的結果炸燬。事實證明,如果v是的System.Guid第一行只是拋出一個異常:F#字符串操作上的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: 

我當然可以分別處理的GUID,問題是什麼其他的對象會給我同樣的煩惱?我應該避免使用字符串運算符嗎? 在我的情況下,對象可能是任何東西

回答

8

這是一個(將)在下一個版本中修復的錯誤。儘管事實上IFormattable的文檔說所有的實現者都必須實現「G」說明符,但是這個錯誤是因爲System.Guid沒有響應IFormattable「G」說明符。所以它實際上有點像System.Guid中的一個bug,但是F#庫將在下一版本的'string'操作符中解決這個bug。

總之,您可以安全地使用此操作符,除了Guid ,但是很快就會被修復,同時你可以使用特殊的Guid。)

+0

所以F#會解決這個bug,但是bug本身不會被修復? – 2009-12-19 19:52:49

+2

對。 (如果擁有System.Guid的團隊在過去的7年中已經設法發佈了這個明顯的錯誤5次,他們現在似乎不太可能修復它。) – Brian 2009-12-19 20:04:03

+1

現在*這就是我稱之爲真實世界函數式編程。 ;-) – 2011-04-09 20:11:44