.net 4.0 .NET 4-使用可空运算符(??)简化if语句

.net 4.0 .NET 4-使用可空运算符(??)简化if语句,.net-4.0,.net 4.0,我有一段代码,它检查返回的对象是否为null。如果是,它将返回0,否则它将返回对象内部的属性 var userPoints = (from Point p in entities.Point where p.UserName == userName select p).SingleOrDefault(); if (userPoints == null) { return

我有一段代码,它检查返回的对象是否为null。如果是,它将返回0,否则它将返回对象内部的属性

var userPoints = (from Point p in entities.Point
                 where p.UserName == userName
                 select p).SingleOrDefault();

        if (userPoints == null)
        {
            return 0;
        }
        else
        {
            return userPoints.Points;
        }
是否可以使用nullable运算符简化if语句?我已经尝试过了,但是系统在尝试读取属性时抛出异常

return userPoints.Points ?? 0;

您不能在您的上下文中使用它。
说明:
您想检查
userPoints
是否为空,但如果不为空,则要返回
userPoints.Points


??
运算符检查第一个操作数是否为null,如果不是null,则返回它。如果您要检查的内容和要返回的内容是两件不同的事情,那么它就不起作用。

您不能在您的上下文中使用它。
说明:
您想检查
userPoints
是否为空,但如果不为空,则要返回
userPoints.Points


??
运算符检查第一个操作数是否为null,如果不是null,则返回它。如果您要检查的内容和要返回的内容是两种不同的内容,则它不起作用。

用鼠标悬停在
var
上,查看它是什么类型。

用鼠标悬停在
var
上,查看它是什么类型。

不,不幸的是,没有确切的操作方法。选项:

  • 使用条件运算符:

    return userPoints == null ? 0 : userPoints.Points;
    
  • 更改查询以使其执行默认设置:

    return (from Point p in entities.Point
            where p.UserName == userName
            select p.Points).SingleOrDefault();
    
就我个人而言,我会选择后一种方法:)如果您想要的是0以外的默认值,则需要类似以下内容:

return (from Point p in entities.Point
        where p.UserName == userName
        select (int?) p.Points).SingleOrDefault() ?? -1;

不,不幸的是,没有什么能做到这一点。选项:

  • 使用条件运算符:

    return userPoints == null ? 0 : userPoints.Points;
    
  • 更改查询以使其执行默认设置:

    return (from Point p in entities.Point
            where p.UserName == userName
            select p.Points).SingleOrDefault();
    
就我个人而言,我会选择后一种方法:)如果您想要的是0以外的默认值,则需要类似以下内容:

return (from Point p in entities.Point
        where p.UserName == userName
        select (int?) p.Points).SingleOrDefault() ?? -1;
您可以这样做:

  var userPoints = (from Point p in entities.Point
                   where p.UserName == userName
                   select p.Point).SingleOrDefault();
  return userPoints;
如果没有结果,则userPoints将为0,否则将为Points的值

您可以这样做:

  var userPoints = (from Point p in entities.Point
                   where p.UserName == userName
                   select p.Point).SingleOrDefault();
  return userPoints;

如果没有结果,则userPoints将为0,否则将为Points的值

这将如何自动获得Points属性呢?一旦他将鼠标悬停在var上,他就会知道返回的是什么类型,而这似乎就是产生混淆的原因。@B泰勒:你编辑了答案吗?我想这与我发表评论时的情况有所不同……但这将如何自动获得Points属性呢?一旦他将鼠标悬停在var上,他就会知道返回的是什么类型,这似乎就是造成混淆的原因。@B泰勒:你编辑了你的答案吗?我认为这与我发表评论时有所不同……有时你会陷入使用功能来做你不能做的事情的思维中,而正确的答案实际上是显而易见的……有时你会陷入使用功能来做你不能做的事情的思维中,而正确的答案实际上是显而易见的……合并操作符(?)已在.NET 2.0而不是4.0中引入。合并运算符(?)已在.NET 2.0而不是4.0中引入。