C#中一个问号和两个问号(a ?? b)的作用

本文深入解析C#中三目运算符的使用技巧,通过具体实例展示如何利用该运算符进行简洁高效的代码编写,特别适用于处理空值和参数处理,提升代码可读性和效率。

不卖关子,直接开门见山:

C#中两个问号的作用是判断??左边的对象是否为null,如果不为null则使用??左边的对象,如果为null则使用??右边的对象。

比如:a = b ?? c,如果b为null,则a = c,如果b不为null,则a = b。

下面一段代码演示了这两种情况:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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,看个直观的例子:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//文艺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的时候:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
// 原先要这样处理参数:
string tmd = String.Empty;
if (Request[ "Select" ] != null )
{
     tmd = Request[ "Select" ];
}
else
{
     tmd = "All" ;
}
 
// 现在重构为:
string tmd1 = Request[ "Select" ] ?? "All" ;

 

怎么样?有没有觉得屌爆了。Session什么的也可以这么处理。顺便提一句,实际项目中处理参数比这个要复杂。往往包括类型转换等操作。类型转换建议用as操作符,强转不好。
 
 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            int? a;

            a = null;//此时输出3

            //a = 6;//此时输出6

            int b = a ?? 3;

            Console.Write(b);

            Console.ReadKey();

        }

    }

}

变量定义中含有一个问号,意思是这个数据类型是NullAble类型的。

 变量定义中含有两个问号,双目运算符,意思是取所赋值??左边的,如果左边为null,取所赋值??右边的。

转载于:https://www.cnblogs.com/Percy_Lee/p/5082012.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值