C# 中的【单问号】的另外一种用法与【双问号】的特别用法

今天,一个同事问我一段代码,是公司一个已经离职的同事写的,看起来有点怪怪的,代码如下:

 /// <summary>
    /// 返回请求
    /// </summary>
    /// <param name="name"></param>
    /// <param name="Encrypt">是否加密</param>
    /// <returns></returns>
    public static string Request(string name, bool Encrypt)
    {
        HttpRequest req = HttpContext.Current.Request;
        string str = req.Form[name] ?? req.QueryString[name] ?? "";

        if (Encrypt)
        {
            return EncryptString(str);
        }
        str = System.Web.HttpUtility.UrlDecode(str, System.Text.Encoding.UTF8);
        return str;
    }

 怪在哪里?

怪就怪在这句string str = req.Form[name] ?? req.QueryString[name] ?? ""; 中的??

一看感觉很难理解,后来在网上查了下资料,解释如下:

  “单问号—用于给变量设初值的时候,给变量(int类型)赋值为null,而不是0!

  双问号—用于判断并赋值,先判断当前变量是否为null,如果是就可以赋一个新值,否则跳过!”

网友拿破仑的文章http://www.mapviews.cn/?p=200给了解释,他给的demo如下:

public int? para;
//public int para;如果不注释掉此行,而把上一行注释掉的话,下面会报错!
public int par()
{
    return this.para ?? 0;
}

如此高效率的写法必须得做个笔记,也给园友们分享下! 

原文地址:https://www.cnblogs.com/jxcia_Lai/p/2638370.html