C# 常用的运算符

类型信息运算符

  • sizeof 运算符
  1. 可以确定栈中值类型需要的长度(单位是字节)。
  2. 类不能使用sizeof
  3. struct(结构体) 中只有值类型的时候,也可以使用sizeof
  4. 对复杂类型使用 sizeof 运算符,就需要把代码放在 unsafe块中。
public struct point
{
	public point(int x,int y)
	{
		X=x;
		Y=y;
	}
	public int X { get; }
	public int Y { get; }
}

Console.WriteLine(sizeof(int));//4
Console.WriteLine(sizeof(Int16));//2
Console.WriteLine(sizeof(Int32));//4
unsafe
{
	Console.WriteLine(sizeof(point));//8
}
  • is 运算符
    检查对象是否与特定的类型兼容(对象或者是该类型,或者派生自该类)。

C# 7 拓展了具有类型匹配的 is 运算符。可以检查常亮、类型和var。

  • typrof
    返回一个表示特定类型的 System.Type 对象
Type type = typeof(string);
Console.WriteLine(type);//System.String
  • as 运算符
    用于执行引用类型的显示类型转换。
    如果要转换的类型与指定的类型兼容,转换就会成功进行;若不兼容,就会返回null。

空合并运算符

  • ??

用于定义可空类型和引用类型的默认值。如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。

放在两个操作数之间,第一个操作数必须是一个可空类型或引用类型;第二个操作数必须与第一个操作数的类型相同2,或者可以隐式地转换为第一个操作数的类型。

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

若第二个操作数不能隐式地转换为第一个操作数的类型,就生成一个变异时错误。

例如:a??b 当a为null时则返回b,a不为null时则返回a本身。

空合并运算符为右结合运算符,即操作时从右向左进行组合的。

如,“a??b??c”的形式按“a??(b??c)”计算。

空值条件运算符

  • ?.
Student b;
string s = b?.Name;

当 b 为 null 的时候,返回空,而不继续执行表达式右侧。

避免抛出 NullReferenceException异常。

溢出异常控制运算符

  • cheched
byte b = byte.MaxValue;
b++;
Console.WriteLine(b);//0

byte b = byte.MaxValue;
checked
{
	b++;//System.OverflowException:“Arithmetic operation resulted in an overflow.”
}
Console.WriteLine(b);

没有 checked 溢出,所以输出 0,有了 checked 后会报异常 System.OverflowException:“Arithmetic operation resulted in an overflow.”

项目中可以配置<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>检查所有未标记的代码进行溢出检查。

  • uncheched 默认行为
byte b = byte.MaxValue;
unchecked
{
	b++;
}
Console.WriteLine(b);

使用 unchecked 禁止溢出检查。

注意:

默认不检查和上溢出和下溢出,因为执行检查会影响性能。使用 checked 作为默认设置时,每一个算数运算符的结果都需要验证其值是否越界。算术运算符也可以用于使用 i++ 的 for 循环中。

为了避免这种影响,最好不适用默认设置(CheckForOverflowUnderflow),在需要的时候使用 checked 运算符。

标识符的名称运算符

  • nameof()
    c# 6 ,接受一个符号、属性或者方法,返回其名称。
posted @ 2021-11-16 21:16  x_amos  阅读(16)  评论(0编辑  收藏  举报