zoukankan      html  css  js  c++  java
  • C#:数据类型转换之显示类型转换

    数据类型转换场景在我们日常编码过程中十分常见:

    场景1:从控制台读取输入的数值,然后进行数学运算。

    Console.WriteLine("输入第一个数");
    var a= Console.ReadLine();
    Console.WriteLine("输入第二个数");
    var b= Console.ReadLine();
    var c = a + b;
    Console.WriteLine($"{a}+{b}={c}");

    输出结果:

     这样的结果肯定不是我们希望的,仔细查看便可知道ReadLine()方法从控制台读取到的是string类型的值,所以我们需要对读取到的值进行显示类型转换。

    类型转换有很多种形式

    第一种使用:Convert类提供的方法进行类型转换。

    Console.WriteLine("输入第一个数");
    var a= Console.ReadLine();
    Console.WriteLine("输入第二个数");
    var b= Console.ReadLine();
    int x = Convert.ToInt32(a);
    int y = Convert.ToInt32(b);
    int c = x + y;
    Console.WriteLine($"{a}+{b}={c}");

    输出结果:

     第二种使用:int类型的Parse方法进行类型转换

    Console.WriteLine("输入第一个数");
    var a= Console.ReadLine();
    Console.WriteLine("输入第二个数");
    var b= Console.ReadLine();
    int x = int.Parse(a);
    int y = int.Parse(b);
    int c = x + y;
    Console.WriteLine($"{a}+{b}={c}");

    输出结果:

     虽然以上两种方法都能够进行类型转换,但是代码会出现一个问题:类型转换异常。比如我们输入第一个数是1q,看一下会出现什么情况。

     第三种:微软实现也考虑到了这种隐患,所以提供了一种安全的转换方法给我们:TryParse()

    Console.WriteLine("输入第一个数");
    var a= Console.ReadLine();
    Console.WriteLine("输入第二个数");
    var b= Console.ReadLine();
    int x;
    int.TryParse(a,out x);
    int y;
    int.TryParse(b,out y);
    int c = x + y;
    Console.WriteLine($"{a}+{b}={c}");

    执行结果:

     倘若我们输入不合法的字符串,程序也不会报错了。

     来看一下API中给出的解释:当转换不成功的时候,会返回一个0值。

    第四种:除此之外我们还见过类型转换操作符:(T)x---x是某种数据类型的值,()表示类型转换操作符,T表示要转换成的目标数据类型。

    比如:将int类型的数据15转换成short类型,这时候就需要使用类型转换操作符,否则编译时会提示错误。

    int a = 15;
    short b = (short)a;
    Console.WriteLine(b);

    输出:15

    类型转换操作符,也会出现一些不安全的情况:如果我们用超出short能够表示的范围的整型数值来转换成short类型,会发生什么呢?

    int c = int.MaxValue;
    short d = (short)c;
    Console.WriteLine(d);

    输出:-1

    所以在使用类型转换操作符的时候,要注意可能发生精度丢失。

    第五种:拆箱操作--即从object类型转换成普通值类型数据的时候--需要使用显示类型转换。

    object a = 15;
    int b = (int)a;
    Console.WriteLine(b);

    输出:15

    但是,对于某些类型,类型转换操作符不能对他们进行显示类型转换

    class Stone
    {
        public int Age { get; set; }
    }
    
    class Monkey
    {
        public int Age { get; set; }
    }

    比如上面的两种类型,我们使用类型转换操作符的时候,是会发生编译期错误的:

    第六种:我们需要自己定义类型转换操作符--在需要被转换的类型中自定义类型转换方法,需要用到显式类型转换关键字、操作符关键字。

    class Stone
    {
        public int Age { get; set; }
        //explicit 显式类型转换 操作符
        //implicit 隐式类型转换操作符
        public static explicit operator Monkey(Stone stone)
        {
            Monkey monkey = new Monkey();
            monkey.Age = stone.Age / 500;
            return monkey;
        }
    }

    这样,我们想要将Stone转换成Monkey类型就成为了可能。

    //自定义类型转换符
    Stone stone = new Stone();
    stone.Age = 5000;
    Monkey monkey = (Monkey)stone;
    Console.WriteLine(monkey.Age + "  " + stone.Age);

    从上面的例子可以推测出,类型转换操作符,其实是一个方法的简计法

    总结:显示类型转换,我们常用的有Convert类、各种简单类型的TryParse()方法、简单类型的类型转换操作符。很少需要自己定义类型转换操作符。

  • 相关阅读:
    [原创]益盟软件测试流程培训
    一图教你如何管理自己的时间
    [原创]质量控制思维导图
    [原创]常用Web服务器日志工具介绍
    [原创]常见的测试类型思维导图
    [原创]软件项目研发控制流程(草稿)
    [原创]Top 15 free SQL Injection Scanners
    [原创]2010年12月测试团队培训表
    [原创]Firefox Throttle 网络带宽限速工具介绍
    [原创]对5W1H分析法应用到工作中的理解
  • 原文地址:https://www.cnblogs.com/bigbosscyb/p/13465983.html
Copyright © 2011-2022 走看看