在我的代码中,是否有一个简写,我只能在对象不为空的情况下为变量分配对象属性的值?
string username = SomeUserObject.Username; // fails if null
我知道我可以像if(SomeUserObject!= null)那样进行检查,但我想我看到了这种测试的简写。
我试过了:
string username = SomeUserObject ?? "" : SomeUserObject.Username;
但这不起作用。
答案 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 ?? ""