int.Parse()和Convert.ToInt32之间的主要区别是什么?
-
int.Parse()
和Convert.ToInt32()
之间的主要区别是什么? - 哪一个是首选
-
如果你有一个string,并且你希望它总是一个整数(比如说,如果某个web服务把一个string格式的整数交给你),你可以使用
Int32.Parse()
。 -
如果您正在收集用户的input信息,通常会使用
Int32.TryParse()
,因为它允许您在用户input无效input时更好地控制情况。 -
Convert.ToInt32()
将一个对象作为参数。 (见克里斯S的答案是如何工作的)如果
Int32.Parse()
方法的参数为null,则Convert.ToInt32()
也不会引发ArgumentNullException
。 这也意味着Convert.ToInt32()
可能比Int32.Parse()
慢一点点,尽pipe在实践中,除非你在一个循环中Int32.Parse()
的迭代,否则你永远不会注意到它。
看看reflection器:
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)的评论所说的那样。
没有什么区别。
Convert.ToInt32()
int.Parse()
内部调用int.Parse()
除了一个参数为null
Convert.ToInt32()
返回0
否则,两者的工作方式相同
不同之处在于:
Int32.Parse()
和Int32.TryParse()
只能转换string。 Convert.ToInt32()
可以带任何实现IConvertible
类。 如果你传递一个string,那么它们是等价的,只不过你会得到types比较的额外开销,等等。如果你正在转换string,那么TryParse()
可能是更好的select。
int.Parse(string s)
- 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); } }
TryParse更快…
这些函数中的第一个函数Parse是任何.Net开发人员都应该熟悉的函数。 这个函数将接收一个string,并尝试从中提取一个整数,然后返回整数。 如果它遇到了无法parsing的东西,那么它会抛出一个FormatException,或者如果这个数字太大,会导致OverflowExceptionexception。 另外,如果你传递一个null值,它可以抛出一个ArgumentExceptionexception。
TryParse是新的.Net 2.0框架的新增function,它解决了原始分析函数的一些问题。 主要区别是exception处理非常慢,所以如果TryParse不能parsingstring,它不会像Parse那样抛出exception。 相反,它返回一个布尔值,指示它是否能够成功parsing数字。 所以你必须传递给TryParse这两个string被parsing和一个Int32输出参数来填写。我们将使用分析器来检查TryParse和Parse之间的速度差异,在这两种情况下,string可以正确parsing,该string不能被正确parsing。
Convert类包含一系列将一个基类转换为另一个的function。 我相信Convert.ToInt32(string)只是检查一个空string(如果string为空,它返回零不像parsing),然后只是调用Int32.Parse(string)。 我将使用分析器来确认这一点,并查看使用Convert而不是Parse对性能有什么实际影响。
来源与例子
希望这可以帮助。
Int32.parse(string)—>
Int32.Parse(string s)方法将数字的string表示forms转换为32位有符号整数等效forms。 当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位有符号整数等价的string表示forms。 这依次调用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
Convert.ToInt32
有19个重载或19种不同的方式,你可以称之为。 也许在2010年的版本更多。
它将尝试从以下types转换;
Object,Boolean,Char,SByte,Byte,Int16,UInt16,Int32,UInt32,Int64,UInt64,Single,Double,Decimal,String,Date
还有其他一些方法; 一个与数字基地和2个方法涉及System.IFormatProvider
另一方面parsing只有4个重载或4种不同的方式可以调用该方法。
Integer.Parse( s As String) Integer.Parse( s As String, style As System.Globalization.NumberStyles ) Integer.Parse( s As String, provider As System.IFormatProvider ) Integer.Parse( s As String, style As System.Globalization.NumberStyles, provider As System.IFormatProvider )
这取决于参数types。 例如,我今天才发现它将使用ASCII值直接将char转换为int。 不完全是我想要的function…
你被警告了!
public static int ToInt32(char value) { return (int)value; } Convert.ToInt32('1'); // Returns 49 int.Parse('1'); // Returns 1
Convert.ToInt32允许空值,它不会抛出任何错误Int.parse不允许空值,它会抛出一个ArgumentNullException错误。
澄清开放控制台应用程序,只需复制下面的代码,并将其粘贴在static void Main(string[] args)
方法,我希望你能理解
public class Program { static void Main(string[] args) { int result; bool status; string s1 = "12345"; Console.WriteLine("input1:12345"); string s2 = "1234.45"; Console.WriteLine("input2:1234.45"); string s3 = null; Console.WriteLine("input3:null"); string s4 = "1234567899012345677890123456789012345667890"; Console.WriteLine("input4:1234567899012345677890123456789012345667890"); string s5 = string.Empty; Console.WriteLine("input5:String.Empty"); Console.WriteLine(); Console.WriteLine("--------Int.Parse Methods Outputs-------------"); try { result = int.Parse(s1); Console.WriteLine("OutPut1:" + result); } catch (Exception ee) { Console.WriteLine("OutPut1:"+ee.Message); } try { result = int.Parse(s2); Console.WriteLine("OutPut2:" + result); } catch (Exception ee) { Console.WriteLine("OutPut2:" + ee.Message); } try { result = int.Parse(s3); Console.WriteLine("OutPut3:" + result); } catch (Exception ee) { Console.WriteLine("OutPut3:" + ee.Message); } try { result = int.Parse(s4); Console.WriteLine("OutPut4:" + result); } catch (Exception ee) { Console.WriteLine("OutPut4:" + ee.Message); } try { result = int.Parse(s5); Console.WriteLine("OutPut5:" + result); } catch (Exception ee) { Console.WriteLine("OutPut5:" + ee.Message); } Console.WriteLine(); Console.WriteLine("--------Convert.To.Int32 Method Outputs-------------"); try { result= Convert.ToInt32(s1); Console.WriteLine("OutPut1:" + result); } catch (Exception ee) { Console.WriteLine("OutPut1:" + ee.Message); } try { result = Convert.ToInt32(s2); Console.WriteLine("OutPut2:" + result); } catch (Exception ee) { Console.WriteLine("OutPut2:" + ee.Message); } try { result = Convert.ToInt32(s3); Console.WriteLine("OutPut3:" + result); } catch (Exception ee) { Console.WriteLine("OutPut3:" + ee.Message); } try { result = Convert.ToInt32(s4); Console.WriteLine("OutPut4:" + result); } catch (Exception ee) { Console.WriteLine("OutPut4:" + ee.Message); } try { result = Convert.ToInt32(s5); Console.WriteLine("OutPut5:" + result); } catch (Exception ee) { Console.WriteLine("OutPut5:" + ee.Message); } Console.WriteLine(); Console.WriteLine("--------TryParse Methods Outputs-------------"); try { status = int.TryParse(s1, out result); Console.WriteLine("OutPut1:" + result); } catch (Exception ee) { Console.WriteLine("OutPut1:" + ee.Message); } try { status = int.TryParse(s2, out result); Console.WriteLine("OutPut2:" + result); } catch (Exception ee) { Console.WriteLine("OutPut2:" + ee.Message); } try { status = int.TryParse(s3, out result); Console.WriteLine("OutPut3:" + result); } catch (Exception ee) { Console.WriteLine("OutPut3:" + ee.Message); } try { status = int.TryParse(s4, out result); Console.WriteLine("OutPut4:" + result); } catch (Exception ee) { Console.WriteLine("OutPut4:" + ee.Message); } try { status = int.TryParse(s5, out result); Console.WriteLine("OutPut5:" + result); } catch (Exception ee) { Console.WriteLine("OutPut5:" + ee.Message); } Console.Read(); } }