当前位置: 代码迷 >> C# >> 字符串转换成整型,终究使用int.Parse,Convert.ToInt32还是int.TryParse
  详细解决方案

字符串转换成整型,终究使用int.Parse,Convert.ToInt32还是int.TryParse

热度:43   发布时间:2016-05-05 04:29:15.0
字符串转换成整型,到底使用int.Parse,Convert.ToInt32还是int.TryParse?

当我们想把一个字符串转换成整型int的时候,我们可能会想到如下三种方式:int.Parse,Convert.ToInt32和int.TryParse。到底使用哪种方式呢?

 

先来考虑string的可能性,大致有三种可能:
1、为null
2、不是整型,比如是字符串
3、超出整型的范围

 

基于string的三种可能性,分别尝试。

 

□ 使用int.Parse

 

string str = null;
int result;
result = int.Parse(str);

以上,抛出ArgumentNullException异常。

 

string str = "hello";
int result;
result = int.Parse(str);

以上,抛出FormatException异常。

 

string str = "90909809099090909900900909090909";
int result;
result = int.Parse(str);

以上,抛出OverflowException异常。

 

□ 使用Convert.ToInt32

 

        static void Main(string[] args)
        {
            string str = null;
            int result;
            result = Convert.ToInt32(str);
            Console.WriteLine(result);
            Console.ReadKey();
        }

以上,显示0,即当转换失败,显示int类型的默认值,不会抛出ArgumentNullException异常。

 

        static void Main(string[] args)
        {
            string str = "hello";
            int result;
            result = Convert.ToInt32(str);
            Console.WriteLine(result);
            Console.ReadKey();
        }

以上,抛出FormatException异常。

 

        static void Main(string[] args)
        {
            string str = "90909809099090909900900909090909";
            int result;
            result = Convert.ToInt32(str);
            Console.WriteLine(result);
            Console.ReadKey();
        }

以上,抛出OverflowException异常。

 

□ 使用int.TryParse

 

        static void Main(string[] args)
        {
            string str = null;
            int result;
            if (int.TryParse(str, out result))
            {
                Console.WriteLine(result);
            }
            else
            {
                Console.WriteLine("转换失败");
            }
            
            Console.ReadKey();
        }

结果:转换失败

 

总结:当需要捕获具体的转换异常的时候,使用int.Parse或Convert.ToInt32,而当string为null,Convert.ToInt32不会抛出ArgumentNullException异常;当只关注是否转换成功,推荐使用int.TryParse。当然,以上也同样适合其它值类型转换,比如decimal, 也有decimal.Parse,Convert.ToDecimal和decimal.TryParse。   

2楼『大雪无痕』
推荐+1;,,—— 只是 TryParse 代码太长。,,代码越长,BUG 越多,思路越乱。,——————————————————————,所以我直接 封装了:,, public static int ToInt(object obj, int defaultValue) { if (obj == null) return defaultValue; if (obj is int) return (int)obj;#if (!WindowsCE amp;amp; !PocketPC) int temp; if (int.TryParse(obj.ToString(), out temp)) return temp; else return defaultValue;#endif#if (WindowsCE || PocketPC) try { return Convert.ToInt32(obj);
1楼zhoumy
谢谢分享
  相关解决方案