.NET 4 - 使用nullable运算符(??)来简化if语句

时间:2011-04-04 08:55:55

标签: .net-4.0

我有这段代码,用于检查返回的对象是否为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;
        }

是否可以使用可空操作符简化if语句?我试过这个,但系统在尝试读取属性

时抛出异常
return userPoints.Points ?? 0;

4 个答案:

答案 0 :(得分:2)

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

  • 使用条件运算符:

    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;

答案 1 :(得分:1)

你可以这样做:

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

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

答案 2 :(得分:0)

您无法在上下文中使用它 说明:
您想要检查userPoints是否为空,但是如果它不为空则想要返回userPoints.Points ??运算符检查第一个操作数是否为null,如果它不为null则返回它。如果您要检查的内容和要返回的内容是两个不同的东西,它就不起作用。

答案 3 :(得分:0)

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