C#高级编程笔记 2016年三月8日运算符和花色强制转换

  • int i=10;
    string s=i.ToString();
    
  1. 隐式转换:只要保证值不会时有发生任何变动,类型转换就可以自行(隐式)举办。

6、类型转换

假若第二个操作数不能够隐含地转换为率先个操作数的系列,就生成一个编译错误。

  • 设若第一个操作数不是null,整个表明式就卓绝第一个操作数的值。
  • 倘使首个操作数是null,整个表明式就非常第二个操作数的值。

  as
运算符用于履行引用类型的显式类型转换。倘若要转换的品类与制定的品类兼容,转换就水到渠成进行;如若不般配,as运算符就会回来
null值。

  • int 转换为 short ——会丢掉数据
  • int 转换为 uint ——会丢掉数据
  • uint 转换为 int ——会丢掉数据
  • float 转换为 int——会丢掉小数点前边的兼具数据
  • 任何数字类型转换为char ——会丢掉数据,
  • decimal
    转换为任何数字类型——因为decimal类型的内部结构不同于整数和浮点数。
  • int? 转换为int ——可空类型的值可以为null
  • 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.  
    }
    

2、is运算符

  • 只好从较小的平头类型隐式地转换为较大的平头类型,不可以从较大的整数类型隐式地更换为较小的平头类型。

C#,3、as 运算符

  2.显式转换:下边为无法拓展展示转换的片段场馆。

1、checked和unchecked 运算符

倘若急需在数字和字符串之间转移,就足以使用.NET
类库中提供的有些措施。Object 类实现了一个ToString()方法,该情势在具有的.NET预定义类型中都拓展了重写

一律,倘使需要分析一个字符串,以搜寻一个数字或布尔值,就可以使用具有预定义值类型都辅助的Parse()方法:

  假诺要禁止溢出检查,则可以把代码标记为unchecked;unchecked是默认行为。只有在急需把几行未检查的代码放在一个出示地标记为checked的大代码块中,才需要显式地利用unchecked关键字。

  C#提供了checked 和uncheckde 运算符。要是把一个代码块标记为checked,
CLR就会执行溢出检查,尽管爆发溢出,就抛出overflowException至极。

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

5、空合并运算符

 

装有的显式类型强制转换都可能不安全,在应用程序中应包含代码来处理可能破产的系列强制转换,

  • string s=”100″;
    int i=int.Parse(s);
    
    • 可空类型隐式地更换为此外可空类型,int?隐式地变换为
      long?、float?、double?、decimal?
    • 非可空类型隐式地变换为可空类型,int
      隐式地变换为 long?、float?、double?、decimal?
    • 可空类型无法隐式地变换为非可空类型,此时必须进行显示转换。
  • 1 byte b=255;

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

     用/checked
    编译器选项举办编译,就足以检查程序中颇具未标记代码中的溢出。

 

 

  在隐式地变换值类型时,可空类型需要考虑其他因素:

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

4、可空类型和运算符

  is运算符可以检查对象是不是与特定的档次兼容。“兼容”表示对象或者是该类型,或者派生自该项目。例如:

  空合并运算符(??)提供了一种连忙模式,可以在可空类型和引用类型时表示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

 

  假使在先后中采纳可空类型(?),就必须考虑null
值在与各类运算符一起使用时的熏陶。通常可空类型与一元或二元运算符一起行使时,如若内部一个操作数或六个操作数都是null,其结果就是null。可是在可比可空类型时,只要有一个操作数是null,相比的结果就是false。

相关文章