美文网首页
C# 类型转换

C# 类型转换

作者: 遥远不是北_ | 来源:发表于2018-10-31 15:06 被阅读24次
    • 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
    • 显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。

    1.隐式转换和显式转换:

    namespace TypeConversionApplication
    {
        class ExplicitConversion
        {
            static void Main(string[] args)
            {
                double d = 66.70;
                int i;
    
                // 显式类型转换(强制转换) double 为 int
                i = (int)d;
    
                // 进行了隐式转换,将 int 型(数据范围小)数据转换为了 long 型(数据范围大)的数据
                int inum = 100;
                long lnum = inum; 
    
                Console.WriteLine(i);
                Console.WriteLine(lnum);
                Console.ReadKey();
                
            }
        }
    }
    当上面的代码被编译和执行时,它会产生下列结果:
    66
    100
    

    2.下面的实例把不同值的类型转换为字符串类型:

    namespace TypeConversionApplication
    {
        class StringConversion
        {
            static void Main(string[] args)
            {
                int i = 77;
                float f = 62.005f;
                double d = 23456.7652;
                bool b = true;
    
                Console.WriteLine(i.ToString());
                Console.WriteLine(f.ToString());
                Console.WriteLine(d.ToString());
                Console.WriteLine(b.ToString());
                Console.ReadKey();
                
            }
        }
    }
    当上面的代码被编译和执行时,它会产生下列结果:
    77
    62.005
    23456.7652
    True
    
    1. 类型之间的转换 - Convert.ToInt32() 和 int.Parse();int.TryParse()

    1). int.Parse()是一种类容转换;表示将数字内容的字符串转为int类型。

    如果字符串为空,则抛出ArgumentNullException异常;

    如果字符串内容不是数字,则抛出FormatException异常;

    如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常;

    2). int.TryParse与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。

    int.TryParse(string s,out int i)
    第一个参数为要转化的值,第二个参数为输出值,如果转换失败,输出值为 0,如果转换成功,输出值为转换后的int值

    该方式也是将数字内容的字符串转换为int类型,但是该方式比int.Parse(string s) 好一些,它不会出现异常,最后一个参数result是输出值,如果转换成功则输出相应的值,转换失败则输出0。

    class test
    {
        static void Main(string[] args)
        {
            string s1="abcd";
            string s2="1234";
            int a,b;
            bool bo1=int.TryParse(s1,out a);
            Console.WriteLine(s1+" "+bo1+" "+a);
            bool bo2=int.TryParse(s2,out b);
            Console.WriteLine(s2+" "+bo2+" "+b);
        }
    }
    结果输出:
    abcd False 0
    1234 True 1234
    

    3). Convert.ToInt32()是一种类容转换;但它不限于将字符串转为int类型,还可以是其它类型的参数;

    1. string 转 int 与抛异常
      string 字符串类型和 int 也是可以转换的。下面代码给出错误的转换方法。
    string a = "123";  // 将a设置为字符串“123”
    int x = (int) a;   // 转换
    
    

    VS 在编译时就会报错, 那么,string 该怎么转换成 int 类型, 我们需要用到 int.Parse(), 代码:

    string a = "123";     // 将a设置为字符串“123”
    int x = int.Parse(a);     // 转换
    

    如果仅仅是这样,是没有问题的,但是,我们下面再来做一个实例。
    用户输入一个数字,而电脑将计算出这个数字加上1以后的答案,并且显示出来。
    用户输入的东西,即 Console.ReadLine() ,一定是以字符串形式表现的。
    于是,运用之前的方法,我们可以写出以下的代码:
    class test
    {
    static void Main(string[] args)
    {
    Console.WriteLine("输入数字,将计算出它加1的答案");
    int a = int.Parse(Console.ReadLine()); //转换用户输入的数字
    Console.WriteLine("答案是{0}",++a); //++a 即 a+1 后的那个数
    Console.ReadKey();
    }
    }
    当程序运行时,会出现:
    输入数字,将计算出它加1的答案

    5
    答案是 6
    

    但是!!! 如果用户输入并非数字的其他字符,如汉字,会发生什么情况?
    此时,用户输入 王 ,程序将无法继续运行下去,因为int类型只能存整数,不能存字符。
    这时,程序就会抛出异常。
    如果用 VS 编,你还会看到异常类型:FormatException。
    所以,为了保险,可以用try、catch来解决此问题。核心代码为:

    try
    {
                   
    }
    catch (Exception)
    {
                    
    }
    

    try 在英语中就是尝试的意思。在这段代码中,try{} 部分,顾名思义,也就是去尝试进行下面的代码。catch{} 部分,则是检测异常。这样,在出现异常时,catch 就能捕获到异常,从而程序并不会停止。
    则这段程序,完整的代码应该为:

    using System;
    class 测试
    {
        static void Main(string[] args)
        {
            try
            {
               Console.WriteLine("输入数字,将计算出它加1的答案");
               int a = int.Parse(Console.ReadLine());   //有可能会抛出异常
               Console.WriteLine("答案是{0}",++a);   //如果没有异常,程序才会进入这一步
            }
            catch (Exception)
            {
                Console.WriteLine("无法转换");  //如果捕获到异常,就说“无法转换”
            }
             Console.ReadKey();
        }
    }
    

    这样,如果我输入了 '王' ,程序结果为:

    无法转换
    

    相关文章

      网友评论

          本文标题:C# 类型转换

          本文链接:https://www.haomeiwen.com/subject/ujdatqtx.html