如果对象不为null,如何将属性值分配给var ONLY

时间:2010-04-11 05:52:07

标签: c# null

在我的代码中,是否有一个简写,我只能在对象不为空的情况下为变量分配对象属性的值?

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

我知道我可以像if(SomeUserObject!= null)那样进行检查,但我想我看到了这种测试的简写。

我试过了:

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

但这不起作用。

7 个答案:

答案 0 :(得分:3)

你的第二句语法略有偏差。

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

答案 1 :(得分:2)

我认为,你最接近的是:

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

答案 2 :(得分:2)

在c#6.0中,您现在可以

string username = SomeUserObject?.Username;
如果SomeUSerObject为null,则

username将设置为null。 如果您希望它获得值"",您可以

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

答案 3 :(得分:1)

这可能就像你要得到的那样接近:

string username = (SomeUserObject != null) ? SomeUserObject.Username : null;

答案 4 :(得分:1)

你可以用吗? :正如其他人所建议的那样,你可能想要考虑Null对象模式,你可以在其中创建一个特殊的静态用户User.NotloggedIn并在任何地方使用它而不是null。

然后总是很容易.Username

其他好处:您可以/可以为案例生成不同的异常(null),其中您没有分配变量和(未登录)不允许该用户执行某些操作的情况。

您的NotloggedIn用户可以是来自User的派生类,比如NotLoggedIn会覆盖方法并抛出未登录时无法执行的操作的异常,例如付款,发送电子邮件,......

作为来自User的派生类,您可以获得一些相当不错的语法糖,因为您可以执行if (someuser is NotLoggedIn) ...

之类的操作

答案 5 :(得分:0)

你在考虑三元运算符。

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

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

答案 6 :(得分:-1)

它被称为空合并,并按如下方式执行:

string username = SomeUserObject.Username ?? ""