我喜欢null-coalescing运算符,因为它可以很容易地为可为null的类型分配默认值。
int y = x ?? -1;
这很好,除非我需要用x
做一些简单的事情。例如,如果我想检查Session
,那么我通常不得不写一些更冗长的东西。
我希望我能这样做:
string y = Session["key"].ToString() ?? "none";
但是您不能这样做,因为.ToString()
在null检查之前被调用,所以如果Session["key"]
为null,它就会失败。我最终会这样做:
string y = Session["key"] == null ? "none" : Session["key"].ToString();
在我看来,它比三行替代方案更有效,更好:
string y = "none";
if (Session["key"] != null)
y = Session["key"].ToString();
即使这是可行的,我仍然很好奇是否有更好的方法。似乎不管怎样,我总是要引用Session["key"]
两次;一次是为了检查,另一次是为了赋值。有什么想法吗?
发布于 2012-03-20 22:12:48
关于
string y = (Session["key"] ?? "none").ToString();
发布于 2012-03-21 02:36:12
发布于 2012-03-20 22:15:38
如果它始终是一个string
,您可以强制转换:
string y = (string)Session["key"] ?? "none";
这样做的好处是,如果有人在Session["key"]
中填充了int
或其他东西,则可以抱怨,而不是隐藏错误。;)
https://stackoverflow.com/questions/9788466
复制相似问题