看一下反射器:
int.Parse( "32"):
public static int Parse(string s) { return System.Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo); }
这是一个电话:
internal static unsafe int ParseInt32(string s, NumberStyles style, NumberFormatInfo info) { byte* stackBuffer = stackalloc byte[1 * 0x72]; NumberBuffer number = new NumberBuffer(stackBuffer); int num = 0; StringToNumber(s, style, ref number, info, false); if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None) { if (!HexNumberToInt32(ref number, ref num)) { throw new OverflowException(Environment.GetResourceString("Overflow_Int32")); } return num; } if (!NumberToInt32(ref number, ref num)) { throw new OverflowException(Environment.GetResourceString("Overflow_Int32")); } return num; }
Convert.ToInt32( "32"):
public static int ToInt32(string value) { if (value == null) { return 0; } return int.Parse(value, CultureInfo.CurrentCulture); }
正如第一个(Dave M's)的评论所说.
如果你有一个字符串,并且你希望它总是一个整数(比如说,如果某个Web服务正在以字符串格式递给你一个整数),你就可以使用它Int32.Parse()
.
如果您正在收集用户的输入,您通常会使用Int32.TryParse()
,因为它允许您在用户输入无效输入时对情况进行更精细的控制.
Convert.ToInt32()
以对象为参数.(参见Chris S的答案,了解它的工作原理)
Convert.ToInt32()
ArgumentNullException
当它的参数为null时也不会抛出Int32.Parse()
.这也意味着它Convert.ToInt32()
可能比我们慢一点Int32.Parse()
,虽然在实践中,除非你在一个循环中进行大量的迭代,否则你永远不会注意到它.
看一下反射器:
int.Parse( "32"):
public static int Parse(string s) { return System.Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo); }
这是一个电话:
internal static unsafe int ParseInt32(string s, NumberStyles style, NumberFormatInfo info) { byte* stackBuffer = stackalloc byte[1 * 0x72]; NumberBuffer number = new NumberBuffer(stackBuffer); int num = 0; StringToNumber(s, style, ref number, info, false); if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None) { if (!HexNumberToInt32(ref number, ref num)) { throw new OverflowException(Environment.GetResourceString("Overflow_Int32")); } return num; } if (!NumberToInt32(ref number, ref num)) { throw new OverflowException(Environment.GetResourceString("Overflow_Int32")); } return num; }
Convert.ToInt32( "32"):
public static int ToInt32(string value) { if (value == null) { return 0; } return int.Parse(value, CultureInfo.CurrentCulture); }
正如第一个(Dave M's)的评论所说.
没有差别.内部
Convert.ToInt32()
呼叫int.Parse()
除了一件事Convert.ToInt32()
返回0
时的说法是null
否则两者都以相同的方式工作
RANGE中的整数>返回整数值
空值> ArguementNullException
不是格式> FormatException
值不在RANGE> OverflowException中
Convert.ToInt32(string s)
RANGE中的整数>返回整数值
空值>返回"0"
不是格式> FormatException
值不在RANGE> OverflowException中
bool isParsed = int.TryParse(string s,out res)
RANGE中的整数>返回整数值,isParsed = true
空值>返回"0",isParsed = false
格式不>返回"0",isParsed = false
值不在RANGE>中返回"0",isParsed = false
请尝试以下代码......
class Program { static void Main(string[] args) { string strInt = "24532"; string strNull = null; string strWrongFrmt = "5.87"; string strAboveRange = "98765432123456"; int res; try { // int.Parse() - TEST res = int.Parse(strInt); // res = 24532 res = int.Parse(strNull); // System.ArgumentNullException res = int.Parse(strWrongFrmt); // System.FormatException res = int.Parse(strAboveRange); // System.OverflowException // Convert.ToInt32(string s) - TEST res = Convert.ToInt32(strInt); // res = 24532 res = Convert.ToInt32(strNull); // res = 0 res = Convert.ToInt32(strWrongFrmt); // System.FormatException res = Convert.ToInt32(strAboveRange); //System.OverflowException // int.TryParse(string s, out res) - Test bool isParsed; isParsed = int.TryParse(strInt, out res); // isParsed = true, res = 24532 isParsed = int.TryParse(strNull, out res); // isParsed = false, res = 0 isParsed = int.TryParse(strWrongFrmt, out res); // isParsed = false, res = 0 isParsed = int.TryParse(strAboveRange, out res); // isParsed = false, res = 0 } catch(Exception e) { Console.WriteLine("Check this.\n" + e.Message); } }
区别在于:
Int32.Parse()
并且Int32.TryParse()
只能转换字符串.Convert.ToInt32()
可以采取任何实现的类IConvertible
.如果你传递一个字符串,那么它们是等价的,除了你为类型比较等获得额外的开销.如果你正在转换字符串,那么TryParse()
可能是更好的选择.
TryParse更快......
第一个这样的函数Parse是任何.Net开发人员都应该熟悉的函数.此函数将接受一个字符串并尝试从中提取整数,然后返回整数.如果它遇到无法解析的内容,则会抛出FormatException,或者如果数字太大而导致OverflowException.此外,如果您传递一个空值,它可以抛出ArgumentException.
TryParse是新的.Net 2.0框架的新增功能,它解决了原始Parse函数的一些问题.主要区别在于异常处理非常慢,所以如果TryParse无法解析字符串,它就不像Parse那样抛出异常.相反,它返回一个布尔值,指示它是否能够成功解析数字.因此,您必须将要解析的字符串和要填充的Int32输出参数传递给TryParse.我们将使用探查器检查TryParse和Parse之间的速度差异,在这两种情况下,可以正确解析字符串,以及在何种情况下无法正确解析字符串.
Convert类包含一系列将一个基类转换为另一个基类的函数.我相信Convert.ToInt32(字符串)只是检查一个空字符串(如果字符串为null,它与Parse不同,它返回零)然后只调用Int32.Parse(字符串).我将使用分析器来确认这一点,看看使用Convert而不是Parse对性能有任何实际影响.
来源举例
希望这可以帮助.
Int32.parse(字符串)--->
Int32.Parse(string s)方法将数字的字符串表示形式转换为其等效的32位有符号整数.当s是空引用时,它将抛出ArgumentNullException.如果s不是整数值,则抛出FormatException.当s表示小于MinValue或大于MaxValue的数字时,它将抛出OverflowException.例如:
string s1 = "1234"; string s2 = "1234.65"; string s3 = null; string s4 = "123456789123456789123456789123456789123456789"; result = Int32.Parse(s1); //1234 result = Int32.Parse(s2); //FormatException result = Int32.Parse(s3); //ArgumentNullException result = Int32.Parse(s4); //OverflowException
Convert.ToInt32(string) - > Convert.ToInt32(string s)方法转换32位有符号整数等效的指定字符串表示形式.这反过来调用Int32.Parse()方法.当s是空引用时,它将返回0而不是抛出ArgumentNullException.如果s不是整数值,则抛出FormatException.当s表示小于MinValue或大于MaxValue的数字时,它将抛出OverflowException.
例如:
result = Convert.ToInt32(s1); // 1234 result = Convert.ToInt32(s2); // FormatException result = Convert.ToInt32(s3); // 0 result = Convert.ToInt32(s4); // OverflowException