考慮,如果你有其中的文化負號M
(負)。我很確定它不存在,但只是認爲你有這樣的事情。那麼你可以這樣做:
string str = "M123";
var culture = new CultureInfo("en-US");
culture.NumberFormat.NegativeSign = "M";
int number = Int32.Parse(str, culture);
這將導致-123
作爲值。這是您可以使用int32.Parse(String, IFormatProvider)
過載的地方。如果你沒有指定文化,那麼它會使用當前的文化,並會失敗的價值M123
。
(舊答)
它與串千分
請看下面的例子是有用的,
string str = "1,234,567";
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
int number = Int32.Parse(str, CultureInfo.CurrentCulture);
這將導致由於一個異常.
是德國文化中的千位分隔符。
對於
int number = Int32.Parse("1.234", NumberStyles.AllowThousands);
以上會成功的解析,因爲德國文化使用.
作爲千位分隔符。
但是,如果您將當前的文化設置爲美國,那麼它會給出例外。
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
int number = Int32.Parse("1.234", NumberStyles.AllowThousands);
參見:Int32.Parse Method (String, IFormatProvider)
提供者參數是一個實施的IFormatProvider,如 一個的NumberFormatInfo或CultureInfo對象。提供者參數 提供關於s格式的文化特定信息。如果 提供程序爲空,則使用當前區域 的NumberFormatInfo對象。
由於您剛剛編輯了問題。 'int32.Parse(String,IFormatProvider)'允許你傳遞'NumberStyles.AllowThousand'並使用當前的文化,如果沒有提供。 – Habib
不,這是一種不同的方法,即'int32.Parse(String,NumberStyles)'或'int32.Parse(String,NumberStyles,IFormatProvider)'。我明確地詢問是否存在用於不能指定'NumberStyles'的方法的用例。 –
剛編輯答案。看看它現在是否有用。 – Habib