2017-07-28 82 views
4

我有下面的代碼片段什麼「中立文化」打破了DateTime.TryParse()?

DateTime date1; 
CultureInfo neutralCulture = new CultureInfo("fr"); 
bool isNeutral = neutralCulture.IsNeutralCulture; // True 

DateTime.TryParse("not a date", neutralCulture, DateTimeStyles.AdjustToUniversal, out date1); 

但是它執行未拋出異常,the documentation狀態

NotSupportedException異常:提供商一個中性文化,不能在分析中使用操作。

"fr"一個中性培養,通過上述CultureInfo對象的屬性所證明,所以我期望這個代碼斷裂。

什麼「中性文化」打破了這種方法 - 這是在任何地方記錄?

+0

似乎在嘗試將線程文化*設置爲中立文化時拋出異常。我沒有時間瀏覽所有的參考資源,但是您可能想自己鑽研:(1)https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/datetime.cs和(2) )https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/globalization/datetimeparse.cs –

+0

你爲什麼期待異常?如果字符串dpe不表示日期TryParse shpuld只是返回false ...我不完全理解文檔中的註釋,但在我看來,它並不指向您傳遞的字符串... – ATC

+0

我我期待着一個例外,因爲文檔指出如果這個特定的參數是一箇中立文化就會發生異常。 – Matt

回答

2

我做了所有的中性文化的快速測試,並連一個也沒有拋出一個異常,如下圖所示:

CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.NeutralCultures); 
foreach (var thisCulture in cultures) 
{ 
    DateTime date1; 
    CultureInfo neutralCulture = new CultureInfo(thisCulture.Name); 
    bool isNeutral = neutralCulture.IsNeutralCulture; // True 

    DateTime.TryParse("not a date", neutralCulture, DateTimeStyles.AdjustToUniversal, out date1); 
} 

我不知道該怎麼從結論。文檔可能是錯的嗎?誰知道。

+0

通常發生這種情況是因爲有人複製並粘貼了現有類似方法的文檔,這種方法可能比使用錯誤文檔的方法具有更多限制性約束。我曾在MSDN文檔中看到過這種情況。 –

+0

我會以此爲解決方案,直到有人在這裏挖掘更具體的傳說:D – Matt