不卖关子,直接开门见山:
C#中两个问号的作用是判断??左边的对象是否为null,如果不为null则使用??左边的对象,如果为null则使用??右边的对象。
比如:a = b ?? c,如果b为null,则a = c,如果b不为null,则a = b。
下面一段代码演示了这两种情况:
static void Main(string[] args)
{
NewFuck();
Shit();
Console.ReadKey();
}
private static void NewFuck()
{
string fuck = "Fuck";
Console.WriteLine(fuck ?? "fuck not found.");
}
private static void Shit()
{
object shit = null;
string b = (string)shit ?? "shit not found.";
Console.WriteLine(b);
}
执行结果如图如真相:
很明显,这种类似三目表达式的运算符可以用来在妹子面前装B,看个直观的例子:
//文艺Fuck
private static void NewFuck()
{
string fuck = "Fuck";
Console.WriteLine(fuck ?? "fuck not found.");
}
//普通Fuck
private static void Fuck()
{
string fuck = "Fuck";
string s = fuck != null ? fuck : "fuck not found.";
Console.WriteLine(s);
}
//2BFuck
private static void SBFuck()
{
string fuck;
fuck = "Fuck";
string s;
if (fuck != null)
{
s = fuck;
}
else
{
s = "fuck not found.";
}
Console.WriteLine(s);
}
这三个方法在结果上是相同的,都会在屏幕上输出Fuck。当然,写个例子只是Demo级别的,我们在实际编程的时候用??运算符往往更有用,可以省去很多麻烦。比如处理页面QueryString的时候:
// 原先要这样处理参数:
string tmd = String.Empty;
if (Request["Select"] != null)
{
tmd = Request["Select"];
}
else
{
tmd = "All";
}
// 现在重构为:
string tmd1 = Request["Select"] ?? "All";
怎么样?有没有觉得屌爆了。Session什么的也可以这么处理。顺便提一句,实际项目中处理参数比这个要复杂。往往包括类型转换等操作。类型转换建议用as操作符,强转不好。