.net 4.0 .NET 4-使用可空运算符(??)简化if语句
我有一段代码,它检查返回的对象是否为null。如果是,它将返回0,否则它将返回对象内部的属性.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
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();
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();
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中引入。