1、checked和unchecked 运算符

  C#提供了checked 和uncheckde 运算符。如果把一个代码块标记为checked, CLR就会执行溢出检查,如果发生溢出,就抛出overflowException异常。

  •  byte b=;
    checked
    {
    b++;
    }
    Console.WriteLine(b.ToString());

    用/checked 编译器选项进行编译,就可以检查程序中所有未标记代码中的溢出。

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

2、is运算符

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

  •  int i=;
    if(i is object)
    {
    Console.WritelLine("i is an object");
    }

3、as 运算符

  as 运算符用于执行引用类型的显式类型转换。如果要转换的类型与制定的类型兼容,转换就成功进行;如果不兼容,as运算符就会返回 null值。

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

4、可空类型和运算符

  如果在程序中使用可空类型(?),就必须考虑null 值在与各种运算符一起使用时的影响。通常可空类型与一元或二元运算符一起使用时,如果其中一个操作数或两个操作数都是null,其结果就是null。但是在比较可空类型时,只要有一个操作数是null,比较的结果就是false。

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

5、空合并运算符

  空合并运算符(??)提供了一种快捷方式,可以在可空类型和引用类型时表示null 可能的值。这个运算符放在两个操作数之间,第一个操作数必须是一个可空类型或引用类型了第二个操作数必须与第一个操作数的类型相同,或者可以隐含得转换为第一个操作数的类型。

  • 如果第一个操作数不是null,整个表达式就等于第一个操作数的值。
  • 如果第一个操作数是null,整个表达式就等于第二个操作数的值。

如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。

 int ?a =null;
int b; b=a??;//b has the value 10
a=;
b=a?? //b has the value 3

6、类型转换

  1. 隐式转换:只要保证值不会发生任何变化,类型转换就可以自动(隐式)进行。
  • 只能从较小的整数类型隐式地转换为较大的整数类型,不能从较大的整数类型隐式地转换为较小的整数类型。

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

    • 可空类型隐式地转换为其他可空类型,int?隐式地转换为 long?、float?、double?、decimal?
    • 非可空类型隐式地转换为可空类型,int 隐式地转换为 long?、float?、double?、decimal?
    • 可空类型不能隐式地转换为非可空类型,此时必须进行显示转换。

  2.显式转换:下面为不能进行显示转换的一些场合。

  • int 转换为 short ——会丢失数据
  • int 转换为 uint ——会丢失数据
  • uint 转换为 int ——会丢失数据
  • float 转换为 int——会丢失小数点后面的所有数据
  • 任何数字类型转换为char ——会丢失数据,
  • decimal 转换为任何数字类型——因为decimal类型的内部结构不同于整数和浮点数。
  • int? 转换为int ——可空类型的值可以为null

所有的显式类型强制转换都可能不安全,在应用程序中应包含代码来处理可能失败的类型强制转换,

如果需要在数字和字符串之间转换,就可以使用.NET 类库中提供的一些方法。Object 类实现了一个ToString() 方法,该方法在所有的.NET预定义类型中都进行了重写

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

同样,如果需要分析一个字符串,以检索一个数字或布尔值,就可以使用所有预定义值类型都支持的Parse() 方法:

  • string s="";
    int i=int.Parse(s);

C#高级编程笔记 2016年10月8日运算符和类型强制转换的更多相关文章

  1. C#高级编程笔记2016年10月12日 运算符重载

    1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...

  2. C#高级编程笔记 2016年10月26日 MVC入门 Controller

    1.MVC的定义:   Models: Classes that represent the data of the application  and that use validation logi ...

  3. 2016年10月31日 星期一 --出埃及记 Exodus 19:16

    2016年10月31日 星期一 --出埃及记 Exodus 19:16 On the morning of the third day there was thunder and lightning, ...

  4. 2016年10月30日 星期日 --出埃及记 Exodus 19:15

    2016年10月30日 星期日 --出埃及记 Exodus 19:15 Then he said to the people, "Prepare yourselves for the thi ...

  5. 2016年10月29日 星期六 --出埃及记 Exodus 19:14

    2016年10月29日 星期六 --出埃及记 Exodus 19:14 After Moses had gone down the mountain to the people, he consecr ...

  6. 2016年10月28日 星期五 --出埃及记 Exodus 19:13

    2016年10月28日 星期五 --出埃及记 Exodus 19:13 He shall surely be stoned or shot with arrows; not a hand is to ...

  7. 2016年10月27日 星期四 --出埃及记 Exodus 19:12

    2016年10月27日 星期四 --出埃及记 Exodus 19:12 Put limits for the people around the mountain and tell them, `Be ...

  8. 2016年10月26日 星期三 --出埃及记 Exodus 19:10-11

    2016年10月26日 星期三 --出埃及记 Exodus 19:10-11 And the LORD said to Moses, "Go to the people and consec ...

  9. 2016年10月25日 星期二 --出埃及记 Exodus 19:9

    2016年10月25日 星期二 --出埃及记 Exodus 19:9 The LORD said to Moses, "I am going to come to you in a dens ...

随机推荐

  1. vtk工作流

    要理解VTK的工作原理,首先应明确几个类型: 1.vtkSource(数据源)   这个就好比一个剧本里面的角色,让演员知道要演的是什么人物. 数据源有:vtkConeSource,vtkSphere ...

  2. Java连接Oracle database小结

    利用jdbc连接Oracle数据库,首先得选对jdbc的版本. jdk6需要ojdbc6.jar这个包.如果选错的话,调用isValid()这个方法时,有可能有这个异常: Exception in t ...

  3. 怎么在Microsoft Project中冻结列

    在用Project排项目计划的时候如果在Gantt图中列比较多,左右滚动的时候就会经想像如果能想Excel一样冻结某些列就方便多了,其实在Project中虽然没有冻结列的功能,但通过一些变通方法还是可 ...

  4. Django登录访问限制 login_requeired

    作用: 1. 用户登录之后才可以访问某些页面 2. 如果没登录,跳转到登录页面 3. 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址 要实现这个需求很简单就是在相应的view前面使用装 ...

  5. MySQL多配置方式的多实例的部署

    安装MySQL需要注意的事项: 选择MySQL的版本的建议: 1)稳定版:选择开源的社区版的稳定版GA版本 2)选择MySQL数据库GA版本发布后六个月以后得GA版本 3)选择发布版本前后几个月没有大 ...

  6. Jsoup 使用教程:数据抽取

    1.使用DOM方法来遍历一个文档 问题 你有一个HTML文档要从中提取数据,并了解这个HTML文档的结构. 方法 将HTML解析成一个Document之后,就可以使用类似于DOM的方法进行操作.示例代 ...

  7. java-生成印章swing

    案例1 package com; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import j ...

  8. UIDynamic(简单介绍)

    一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如:重力.弹性碰撞等现 ...

  9. 通过CAGradientLayer制作渐变色效果(转)

    转载自:http://blog.it985.com/7986.html 看了极客学院的视频之后写的一篇博客,觉得不错,还是作为笔记使用. 简单介绍一下CAGradientLayer吧. Gradien ...

  10. 教你一招:在PowerPoint中自定义可输入文本的占位符

    日常生活中,当我们设计多媒体课件时,默认的版式其实已经够用了.但是,很多时候,我们需要更加个性一点,所以,我们需要自定义很多东西.本文介绍在PowerPoint中自定义可输入文本的占位符. 一.占位符 ...