Welcome

首页 / 软件开发 / C# / 如何把string解析为int?

如何把string解析为int?2010-06-22 cnblogs Allen LeeQ:如何把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前缀,否则将会抛出异常。