C# 数据的类型转换
Convert 和 Parse :
将 string locstr = 169.ToString(); 转换为整数型
方法1:
int i = Convert .ToInt16(locstr); //用 Convert
方法2:
int i = int .Parse(locstr); //用 Parse
Convert.ToInt32() 与 int.Parse() 的区别
(1) 这两个方法的最大不同是它们对 null 值的处理方法: Convert.ToInt32(null) 会返回 0 而不会产生任何异常,但 int.Parse(null) 则会产生异常。
(2) 对数据进行四舍五入时候的区别
- a. Convert.ToInt32(double value) 如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5 转换为 4,4.5 转换为 4,而 5.5 转换为 6。不过 4.6 可以转换为 5,4.4 转换为 4 。
- b. int.Parse("4.5") 直接报错:"输入字符串的格式不正确"。
- c. int(4.6) = 4 Int 转化其他数值类型为 Int 时没有四舍五入,强制转换。
(3) 对被转换类型的区别 int.Parse 是转换 String 为 int, Convert.ToInt32 是转换继承自 Object 的对象为 int 的(可以有很多其它类型的数据)。你得到一个 object 对象, 你想把它转换为 int, 用 int.Parse 就不可以, 要用 Convert.ToInt32。
C# 运算符
- c = a++: 先将 a 赋值给 c,再对 a 进行自增运算。
- c = ++a: 先将 a 进行自增运算,再将 a 赋值给 c 。
- c = a--: 先将 a 赋值给 c,再对 a 进行自减运算。
- c = --a: 先将 a 进行自减运算,再将 a 赋值给 c 。
例:int a = 1;
int b ;
b = a++; // a=2 , b=1
b = ++a; // a=2 , b=2
b = a--; // a=0 , b=1
b = --a; // a=0 , b=0
可空类型修饰符 " ? "
为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符 ? 来表示,表现形式为 T? 。
例如:int? 表示可空的整形,DateTime? 表示可为空的时间。
三元(运算符)表达式 " ?: "
例如:x?y:z 表示如果表达式 x 为 true,则返回 y;如果 x 为 false,则返回 z,是 if{ } else{ } 的简单形式。
空合并运算符 " ?? "
用于定义可空类型和引用类型的默认值。
如果此运算符的左操作数不为 null,则此运算符将返回左操作数,否则返回右操作数。
例如:a??b 当 a 为 null 时则返回 b,a 不为 null 时则返回 a 本身。
空合并运算符为右结合运算符,即操作时从右向左进行组合的。
如: a??b??c 的形式按 a??(b??c) 计算。
NULL 检查运算符 " ?. "
int? firstX = points?.FirstOrDefault()?.X;
移位运算 " >> " 或 " << "
C# 是用 <<(左移) 和 >>(右移) 运算符是用来执行移位运算。
左移 (<<):将第一个操作数向左移动第二个操作数指定的位数,空出的位置补 0。
左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。
x<<1= x*2 x<<2= x*4 x<<3= x*8 x<<4= x*16
同理, 右移即相反:
右移 (>>):将第一个操作数向右移动第二个操作数所指定的位数,空出的位置补 0。
右移相当于整除. 右移一位相当于除以 2;右移两位相当于除以 4;右移三位相当于除以 8。
x>>1= x/2 x>>2= x/4 x>>3= x/8 x>>4= x/16