C#高级编制程序笔记 201陆年一月二十一日运算符和种类强制转换

1、checked和unchecked 运算符

  C#提供了checked 和uncheckde 运算符。倘若把一个代码块标记为checked,
CL奥迪Q7就会实施溢出检查,要是发生溢出,就抛出overflowException十分。

  • 1 byte b=255;

    2 checked
    3 {
    4     b++;
    5 }
    6 Console.WriteLine(b.ToString());
    

     用/checked
    编写翻译器选项实行编译,就足以检查程序中具备未标记代码中的溢出。

  假使要禁止溢出检查,则足以把代码标记为unchecked;unchecked是暗中同意行为。唯有在须求把几行未检查的代码放在2个出示地标记为checked的大代码块中,才须求显式地动用unchecked关键字。

2、is运算符

  is运算符可以检核对象是不是与一定的体系包容。“包容”表示对象或然是该品种,大概派生自该品种。例如:

  • 1 int i=10;
    2 if(i is object)
    3 {
    4     Console.WritelLine("i is an object");
    5 }
    

3、as 运算符

  as
运算符用于实践引用类型的显式类型转换。借使要转换的档次与制定的档次包容,转换就马到功成进行;如若不匹配,as运算符就会回来
null值。

  • object o1=”Some Thing”;
    object o2=1;
    string s1=o1 as string;//s1="Some Thing"
    string s2=o2 as string;//s2=null
    

4、可空类型和平运动算符

  借使在程序中运用可空类型(?),就无法不思考null
值在与各样运算符一起利用时的熏陶。常常可空类型与1元或贰元运算符1起行使时,若是内部贰个操作数或三个操作数都以null,其结果就是null。但是在可比可空类型时,只要有二个操作数是null,比较的结果便是false。

  • int? a=null;

    int? b=a+4;//b=null
    int? c=a*5;//c=null
    
    int? a=null;
    int? b=-5;
    
    if(a>=b)
    {
        Console.WriteLine("a>=b");
    }
    else
    {
      Console.WriteLine("a<b");//Do this.  
    }
    

5、空合并运算符

  空合并运算符(??)提供了一种赶快格局,能够在可空类型和引用类型时表示null
只怕的值。这几个运算符放在多少个操作数之间,第多少个操作数必须是四个可空类型或引用类型了第三个操作数必须与第二个操作数的类型相同,或然能够包罗得转换为第二个操作数的门类。

  • 假使第二个操作数不是null,整个表明式就等于第二个操作数的值。
  • 设若第陆个操作数是null,整个表明式就等于第三个操作数的值。

假定第三个操作数无法隐含地转换为率先个操作数的系列,就生成三个编译错误。

 

1 int ?a =null;
2 int b;
3 
4 b=a??10;//b has the value 10
5 a=3;
6 b=a??10 //b  has the value 3

 

陆、类型转换

  1. 隐式转换:只要保证值不会发生任何变化,类型转换就足以活动(隐式)实行。
  • 唯其如此从较小的整数类型隐式地更换为较大的平头类型,不能够从较大的整数类型隐式地转换为较小的平头类型。

  在隐式地转移值类型时,可空类型必要惦念任何因素:

    • 可空类型隐式地转移为任何可空类型,int?隐式地转移为
      long?、float?、double?、decimal?
    • 非可空类型隐式地转移为可空类型,int
      隐式地更换为 long?、float?、double?、decimal?
    • 可空类型不能隐式地转移为非可空类型,此时必须举办展示转换。

  二.显式转换:上面为不能拓展体现转换的片段场合。

  • int 转换为 short ——会丢掉数据
  • int 转换为 uint ——会丢掉数据
  • uint 转换为 int ——会丢掉数据
  • float 转换为 int——会丢掉小数点后边的富有数据
  • 别的数字类型转换为char ——会丢掉数据,
  • decimal
    转换为任何数字类型——因为decimal类型的内部结构区别于整数和浮点数。
  • int? 转换为int ——可空类型的值能够为null

全数的显式类型强制转换都恐怕不安全,在应用程序中应涵盖代码来拍卖恐怕破产的档次强制转换,

 

假定急需在数字和字符串之间转换,就能够使用.NET
类库中提供的壹部分格局。Object 类完结了1个ToString()
方法,该措施在有着的.NET预约义类型中都拓展了重写

  • int i=10;
    string s=i.ToString();
    

同样,假如急需分析3个字符串,以寻找二个数字或布尔值,就能够运用具有预约义值类型都辅助的Parse()
方法:

  • string s=”100″;
    int i=int.Parse(s);