Q:如何把string解析為int?
A:簡單的方法有三種:
string source = "1412";
int result = 0;
// 使用Convert.ToInt32(string value);
result = Convert.ToInt32(source);
// 使用Int32.Parse(string value);
result = Int32.Parse(source);
// 使用Int32.TryParse(string s, out int result);
Int32.TryParse(source, out result);
Q:這三種方法有什麼不同?
A:一個簡單的回答是:
如果解析失敗,Int32.Parse(source)總會拋出異常;Convert.ToInt32(source)在source為null的情況下不會拋出異常而是簡單的返回0給調用方;而Int32.TryParse(source, result)則無論如何都不拋出異常,只會返回true或false來說明解析是否成功,如果解析失敗,調用方將會得到0值。
Q:如果我要解析的字符串的字面數值不是十進制的話,那麼從這些方法中得到的返回值是有問題的。有什麼方法解決?
A:那麼你就需要這些方法的對應重載版本了,一個簡單的方法是使用Convert類的
public static int ToInt32(string value, int fromBase);
其中fromBase的值只能為2、8、10或者16,用於指定進制方式。如果fromBase不是指定的數值或者value不為十進制而又帶有前綴正負號,就會拋出ArgumentException。
string source = "0x1412"; // 這裡的0x(或0X)前綴是可選的。
int result = Convert.ToInt32(source, 16);
當然,你還可以通過為Int32類的
public static int Parse(string s, NumberStyles style);
指定NumberStyles.AllowHexSpecifIEr或者NumberStyles.HexNumber為第二個參數來解析十六進制字面值的字符串,此時,你需要引用System.Globalization命名空間。
或者使用Int32類的
public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out int result);
並指定NumberStyles.AllowHexSpecifIEr或者NumberStyles.HexNumber為第二個參數,null為第三個參數來解析十六進制字面值的字符串。你當然也應該引用System.Globalization命名空間。
這裡有一點要提醒的是,無論使用Parse或者TryParse方法來解析十六進制,字符串都不能出現0x或0X前綴,否則將會拋出異常。