首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET 4-使用可空运算符(??)简化if语句

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

Stack Overflow用户
提问于 2011-04-04 16:55:55
回答 4查看 561关注 0票数 0

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

代码语言:javascript
复制
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语句?我已经尝试过了,但系统在尝试读取属性时抛出异常

代码语言:javascript
复制
return userPoints.Points ?? 0;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-04 16:59:13

不,不幸的是,没有任何东西可以做到这一点。选项:

  • 使用条件运算符:

userPoints.Points;

  • Change userPoints == null ?0:返回您的查询以执行默认操作:

返回(从entities.Point中的点p开始,其中p.UserName == userName选择return

就我个人而言,我倾向于后一种方法:)如果你想要一个非0的默认值,你需要这样的东西:

代码语言:javascript
复制
return (from Point p in entities.Point
        where p.UserName == userName
        select (int?) p.Points).SingleOrDefault() ?? -1;
票数 2
EN

Stack Overflow用户

发布于 2011-04-04 17:00:33

您可以这样做:

代码语言:javascript
复制
  var userPoints = (from Point p in entities.Point
                   where p.UserName == userName
                   select p.Point).SingleOrDefault();
  return userPoints;

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

票数 1
EN

Stack Overflow用户

发布于 2011-04-04 16:58:03

您不能在您的上下文中使用它。

解释:

您希望检查userPoints是否为null,但如果不为null,则返回userPoints.Points

??运算符检查第一个操作数是否为null,如果不为null,则返回它。如果你想要检查的东西和你想要返回的东西是两个不同的东西,那么它就不会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5536388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档