C#中 ?? 的用法

??含义:如果 ?? 运算符的左操作数非 null,该运算符将返回左操作数,否则返回右操作数。

如果不赋予初值,C#的变量是不允许直接使用的。

但有的时候,让值的类型为空是非常有用的,

比如三态bool,其中一个状态便是未给定值。

泛型使用System.NullAble<T>提供了类型值为空的一种方式。

System.NullAble<T> nullAbleInt;

因为太常用,C#特意给了一个语法快捷

int? nullAbleInt;

简单的例子:

int? nVal1 = new int?();

int? nVal2 = null;

int? nVal3 = 3;

Console.WriteLine(nVal1); // 输出null

Console.WriteLine(nVal2); // 输出null

Console.WriteLine(nVal3); // 输出3

原则:null与任何数数学运算结果为null,null bool 操作任何值结果为 null。

为了减少可空类型的代码量,遇到null的时候

C#提供了??操作符来获取如果为空的默认值。

static void Main(string[] args)

{

int? nVal1 = null;

int? nVal2 = 5;

// nVal1为空,相乘后还是null,输出0作为默认值

Console.WriteLine(2 * nVal1 ?? 0);

// nVal2非空,取计算值输出,输出10

Console.WriteLine(2 * nVal2 ?? 0);

}

再举一个实例:

/// <summary>

/// 获取上次配置

/// </summary>

public static UploadConfig Config

{

get

{

//如果 ?? 运算符的左操作数非 null,该运算符将返回左操作数,否则返回右操作数。

//本例中,即如果_config不为null的话,直接返回,如果为null的话,进行实例化,再返回

return _config ?? (_config = new UploadConfig()

{

RootUploadPath = "/temp/excel/",

Storage = StorageType.SameDirectory,

AllowExt = ".xls",

MaxSize = 1024000

});

}

}