如何属性的值仅当对象不是null
在我的代码分配给一个变种,是没有办法,我可以用它来分配变量的对象的属性值的简写仅当对象ISN” t null?如何属性的值仅当对象不是null
string username = SomeUserObject.Username; // fails if null
我知道我可以做一个检查,如果(SomeUserObject!= null),但我认为我看到了这种测试的简写。
我想:
string username = SomeUserObject ?? "" : SomeUserObject.Username;
但是,这并不工作。
你的第二语法稍微偏离。
string name = SomeUserObject != null ? SomeUserObject.Username : string.Empty;
这就是所谓的空合并,并进行如下:
string username = SomeUserObject.Username ?? ""
如果SomeUserObject为空,则仍会失败。 – micahtan 2010-04-11 05:57:40
SomeUserObject可能为空。他应该使用条件运算符,并检查他的空对象。 – 2010-04-11 05:58:05
你们是对的 - 我误解了这个问题,对不起! – 2010-04-11 10:54:07
你要得到,我认为,最近的是:
string username = SomeUserObject == null ? null : SomeUserObject.Username;
这可能是接近你会得到:
string username = (SomeUserObject != null) ? SomeUserObject.Username : null;
你考虑三元运算符。
string username = SomeUserObject == null ? "" : SomeUserObject.Username;
查看http://msdn.microsoft.com/en-us/library/ty67wk28.aspx了解更多详情。
可以使用? :正如其他人所建议的,但您可能需要考虑创建特殊静态用户的空对象模式,并在所有位置使用该对象而不是空值。
然后就很容易经常做.Username
。
其他好处:你得到/可以产生不同的例外情况(空),你没有分配变量和(没有登录),该用户不允许做某事。
你NotloggedIn用户可以从用户,说NotLoggedIn重写方法和抛出的东西时,不登录,像付款,发送电子邮件,你不能做的例外......
作为一个派生类从用户派生类中你得到一些相当不错的语法糖,你可以像if (someuser is NotLoggedIn) ...
的东西在C#6.0,你现在可以做
string username = SomeUserObject?.Username;
用户名会被设置为空,如果SomeUSerObject为null。 如果你想让它变得值“”,你可以做
string username = SomeUserObject?.Username ?? "";
在第二,你在想这两个空合并运算符*和*条件运算符。不幸的是,你已经成功地将它们组合成非法代码。有关条件运算符的用法,请参阅下面的答案。 – 2010-04-11 06:04:44