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