C#中运算符的介绍和使用

下面将介绍C#中的常用到的运算符:条件运算符,is 运算符,as 运算符,sizeof 运算符,typeof 运算符,空合并运算符,空值传播运算符。

1、条件运算符( ?: )

条件运算符也称作三元运算符,是if..else 的简化形式,其名称的出处是他带有三个操作数。他首先判断一个条件,如果条件为真,返回第一个值,否则返回第二个值。恰当的使用三元运算符可以使程序更加简洁。

形式: condition ?  true_value:false_value  ,如:int a = c > 0 ? c -1:c+1; 

// 一个方法,返回值是 int 类型,参数是 可空类型 int?,该方法用来判断参数是否为空,不为空返回 +1 值,否则返回 0
public int  GetNum(int? a)
{
	// 1. 使用if...else
	if(a != null)
	{
		return (int)a + 1;
	}
	else
	{
		return 0;
	}

	// 2.使用三元运算符
	return a != null ? (int)a + 1 : 0;
}
可空类型的介绍和使用点击打开链接

2、is 运算符

is 运算符用来判断变量是否是特定的类型或者是派生自该类型,是返回 true,否则返回 false

int a = 1;
// int 类型不是 long 类型,也不派生自 long 类型
bool type =	a is long; // false
// int 类型是 int 类型,派生自 object 类型
bool type1 = a is object; // true
bool type2 = a is int; // true

上面只是简单的示例,下面是较复杂的,扩展:uint( 范围:0 ~ 2^32 - 1 ),long( 范围:-2^63 ~ 2^63 -1 ),ulong( 范围:0 ~ 2^64 -1 )

// 50 是一个整数,如果没有显示声明的话(用小写或大写字母: u 和 U 代表 uint ,l 和 L 代表 long),默认是 int
object  a1 = 50;
// 特殊情况:int 类型的最大整数值是 2^31 - 1 = 2147483647,超过这个范围,会依次按照(uint,long,ulong)的范围去定义类型
object  a2 = 2147483648;
bool type3 = a1 is int; // true		
bool type4 = a2 is uint; // true

3、as运算符

as 运算符用于将引用类型的显示转换,如果要转换的类型是原类型或者是派生自原类型,则转换成功,否则返回 null

注意:

(1)、as 运算符只能用于引用类型;

(2)、如果转换不成功会返回 null。

object a = "str";
object b = 5;
// a 是 string 类型隐式转换成的 object 类型,as 转换成功
string c = a as string; // string
// b 是 int 类型隐式转换成的 object 类型,as 将他转换成 string 类型,返回 null
string c1 = b as string; // null

4、sizeof 运算符用于返回栈中值类型所需长度(单位:字节)。

// int 是 32 位的,占 4 个字节,1 个字节是 8 位
int a = sizeof(int); // 4
注意:sizeof 一般用来获取基本类型的所占字节数,扩展:基本类型(整数,浮点数(decimal 去除),字符类型,布尔类型)

5、typeof 运算符用于返回 指定类型的 System.Type 对象,常用于反射。

注意:typeof 和 GetType() 有相同的作用,区别是:typeof 的参数是 类型,GetType() 的参数是类型的变量

// typeof 的参数是类型,GetType() 方法通过类型的变量调用
Type a = typeof(AAA);
AAA aa = new AAA();
Type b = aa.GetType();

6、空合并运算符(??)用于引用类型或是可空类型,返回一个非空的值,当第一个操作数不为空的时候返回第一个,否则返回第二个。

注意:空合并运算符只用于判断 引用类型 和 可空类型 并返回一个非空的值。

// 可空类型的变量 a
int? a = null;
// 当 a 不为空的时候,?? 将 a 显示转换成了 int 类型并赋值给 b,否则 b = 0;
int b = a ?? 0;

AAA c = new AAA();
AAA d = c ?? new AAA();
7、空值传播运算符(?.)用来判断 类 的对象是否为空,为空返回空,否则返回 对应的 字段 或 属性 值。

注意:当结果为空或其他的话,使用空值传播运算符更加方便,常用于方法的参数判定和赋值。

public class AAA
{
	public static int GetNum(BBB aaa)
	{
		int result = 0;
		if(aaa != null)
		{
			// aaa 不为空的时候判断他的字段 bbb 是否为空,不为空返回 bbb 的 字段 ccc 的值,否则返回 0
			result = aaa.bbb != null ? aaa.bbb.ccc:0;
		}
		return result;
	}
	public static int GetNum1(BBB aaa)
	{
		// 按照运算符的优先级,相同的运算符是左关联的(从左到右计算)
		int result = (aaa ?.bbb?.ccc) ?? 0;
		return result;
	}
}
public class BBB
{
	// 包含 CCC 类的一个变量 bbb
	public CCC bbb;
}
public class CCC
{
	// 一个 int 类型的变量 ccc
	public int ccc = 1;
}
运算符的优先级点击打开链接







  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值