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;
}
如此高效率的写法必须得做个笔记,也给园友们分享下!

浙公网安备 33010602011771号