如何属性的值仅当对象不是null

问题描述:

在我的代码分配给一个变种,是没有办法,我可以用它来分配变量的对象的属性值的简写仅当对象ISN” t null?如何属性的值仅当对象不是null

string username = SomeUserObject.Username;  // fails if null 

我知道我可以做一个检查,如果(SomeUserObject!= null),但我认为我看到了这种测试的简写。

我想:

string username = SomeUserObject ?? "" : SomeUserObject.Username; 

但是,这并不工作。

+0

在第二,你在想这两个空合并运算符*和*条件运算符。不幸的是,你已经成功地将它们组合成非法代码。有关条件运算符的用法,请参阅下面的答案。 – 2010-04-11 06:04:44

你的第二语法稍微偏离。

string name = SomeUserObject != null ? SomeUserObject.Username : string.Empty; 

这就是所谓的空合并,并进行如下:

string username = SomeUserObject.Username ?? "" 
+1

如果SomeUserObject为空,则仍会失败。 – micahtan 2010-04-11 05:57:40

+0

SomeUserObject可能为空。他应该使用条件运算符,并检查他的空对象。 – 2010-04-11 05:58:05

+0

你们是对的 - 我误解了这个问题,对不起! – 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 ?? "";