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;
}

 

运算符的优先级点击打开链接

 

出处:https://blog.csdn.net/cloproad/article/details/78923363

posted on 2021-09-12 18:11  jack_Meng  阅读(888)  评论(0编辑  收藏  举报

导航