C#高级编程笔记 2016年10月8日运算符和类型强制转换
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、类型转换
- 隐式转换:只要保证值不会发生任何变化,类型转换就可以自动(隐式)进行。
- 只能从较小的整数类型隐式地转换为较大的整数类型,不能从较大的整数类型隐式地转换为较小的整数类型。
在隐式地转换值类型时,可空类型需要考虑其他因素:
- 可空类型隐式地转换为其他可空类型,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日运算符和类型强制转换的更多相关文章
- C#高级编程笔记2016年10月12日 运算符重载
1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...
- C#高级编程笔记 2016年10月26日 MVC入门 Controller
1.MVC的定义: Models: Classes that represent the data of the application and that use validation logi ...
- 2016年10月31日 星期一 --出埃及记 Exodus 19:16
2016年10月31日 星期一 --出埃及记 Exodus 19:16 On the morning of the third day there was thunder and lightning, ...
- 2016年10月30日 星期日 --出埃及记 Exodus 19:15
2016年10月30日 星期日 --出埃及记 Exodus 19:15 Then he said to the people, "Prepare yourselves for the thi ...
- 2016年10月29日 星期六 --出埃及记 Exodus 19:14
2016年10月29日 星期六 --出埃及记 Exodus 19:14 After Moses had gone down the mountain to the people, he consecr ...
- 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 ...
- 2016年10月27日 星期四 --出埃及记 Exodus 19:12
2016年10月27日 星期四 --出埃及记 Exodus 19:12 Put limits for the people around the mountain and tell them, `Be ...
- 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 ...
- 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 ...
随机推荐
- 第7章 权限管理(3)_文件系统属性和sudo权限
3. 文件系统属性chattr权限 (1)chattr命令 命令格式: #chattr [+-=][选项] 文件或目录名 +.-.= 分别表示增加权限.删除权限和赋于某种权限 选项 i:主要用来防止对 ...
- python中的常用方法
1.os模块的常用方法: >>> import os >>> >>> myFiles = ['accounts.txt', 'details.cs ...
- UNIX系统基本结构
UNIX系统的基本结构如图所示.整个UNIX系统可分为五层:最底层是裸机,即硬件部分:第二层是UNIX的核心,它直接建立在裸机的上面,实现了操作系统重要的功能,如进程管理.存储管理.设备管理.文件管理 ...
- android第一行代码-5.监听器的两种用法和context
监听器的两种用法 1.匿名函数设置监听器 public class MainActivity extends Activity { private Button button; @Override p ...
- keyset获取元素
public static void main(String[] args){ Map map = new HashMap(); map.put("apple", "新鲜 ...
- 原版ubuntu 系统下,emacs24无法输入中文问题解决方案
在重装了原版ubuntu14后,安装了搜狗输入法,但是意外的发现在emacs下无法使用.在网上查找了一些教程后,解决了该问题.解决方案如下: $sudo mv /usr/bin/emacs24 /us ...
- 如何动态在文档中加入<script></script>写入大段js?
<script language="javascript">var script = document.createElement("script" ...
- 《如何在大学里脱颖而出(How to Win at College)》读书笔记
<如何在大学里脱颖而出(How to Win at College)>读书笔记 图书简介 中文版: 英文版: 作者卡尔·纽波特(Cal Newport)于 2004 年6月以优等生荣誉学会 ...
- Android开发之Touch事件分发机制
原地址http://www.cnblogs.com/linjzong/p/4191891.html Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实 ...
- spring-事务管理
一个数据库事务是一个被视为单一的工作单元的操作序列.这些操作应该要么完整地执行,要么完全不执行.事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性.事务的概念可以描述为 ...