属性get上的null-coalescing运算符

r3p*_*ica 2 c#

所以,我正在阅读一篇文章,我遇到了一些让我质疑它的代码.

代码如下所示:

private UserService _userService = null;

protected UserService UserService
{
    get { return _userService ?? Request.GetOwinContext().GetUserManager<UserService>(); }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,私有属性看起来总是为null,因此使用null-coalescing运算符是没用的.我想它和这样做很有用:

protected UserService UserService
{
    get { return Request.GetOwinContext().GetUserManager<UserService>(); }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?虽然我们在讨论这个问题,但为什么这样做:

private UserService _userService = null;
Run Code Online (Sandbox Code Playgroud)

肯定是这样的

private UserService _userService;
Run Code Online (Sandbox Code Playgroud)

请帮我澄清一下我的怀疑:D

Her*_*des 6

你是对的,私有财产在你的例子中总是为空.

解决它的一种方法是使用以下代码:

private UserService _userService = null;

protected UserService UserService
{
    get
    {
        return _userService ?? (_userService = Request.GetOwinContext().GetUserManager<UserService>());
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,私有属性在非null时使用,或者初始化为指定的值.??执行null-coalescing运算符后的语句时_userService,属性实际返回指定的值.