C# 常用的运算符
类型信息运算符
- sizeof 运算符
- 可以确定栈中值类型需要的长度(单位是字节)。
- 类不能使用
sizeof
。 - 当
struct(结构体)
中只有值类型的时候,也可以使用sizeof
。 - 对复杂类型使用
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 ,接受一个符号、属性或者方法,返回其名称。