关于C#中的“?”
1. 可空类型修饰符(t?)
强类型语言中引用类型可以为空,如:string str=null;
而你若是定义一个值类型为空,则是会报错的。
然而,在处理数据库和其他包含可能未赋值的元素的数据类型时,我们希望可以将 null 赋值给数值类型或布尔型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true 或 false,或者,该字段也可以未定义
所以c# 提供了一个特殊的数据类型,nullable
例如,nullable< int32 >,读作"可空的 int32",可以被赋值为 -2^31 到2^31-1 之间的任意值,也可以被赋值为 null 值。 类似的,nullable< bool > 变量可以被赋值为 true 或 false 或 null。 实际上,nullable类型是一个结构体,它有两个公开可读字段:hasvalue和value。 hasvalue是一个布尔值,当有值存储时它为真,当变量值为null时hasvalue为假。当havvalue为真是时,可以取得变量的值;为假时,当尝试取得变量的值时会抛出一个异常(system.invalidoperationexception)。 声明一个 nullable 类型(可空类型)的语法如下: 例如:int? 表示可空的整形,datetime? 表示可为空的时间。 例如:int?,编译后便是system.nullable的形式。 例如:x?y:z 表示如果表达式x为true,则返回y;如果x为false,则返回z,是省略if{}else{}的简单形式。 为了减少可空类型的代码量,遇到null的时候,c#提供了 如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。 例如:a??b 当a为null时则返回b,a不为null时则返回a本身。 空合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(b??c)”计算。 ?.用于判断某个对象是否为空,如果对象为null,则不进行后面的获取成员的运算,直接返回null 例如: 说明:
用可空类型修饰符"?"来表示,
表现形式为"t?"
t? 其实是system.nullable(泛型结构)的缩写形式,也就意味着当你用到t?时编译器编译 时会把t?编译成system.nullable的形式。2. 三元(运算符)表达式(?: )
3. 空合并运算符(??)
??
操作符来获取如果为空的默认值4. null检查运算符(?.)
class foo
{
public int n { get; } = 1;
}
static void main(string[] args)
{
foo foo = null;
var n = 2 + foo?.n ?? 1
console.writeline(n);
console.readkey();//input :1
}
上一篇: web框架