在C#中使用三元运算符时,有时生成要求值的值的表达式可能会很长.有没有办法在一个结果表达式中获得它的值?

例如,如果我有一个三元表达式:

bool? foo = model.People.SingleOrDefault(x => x.Age > 21 && x.Name.StartsWith("Jo")) == null ? null : model.People.SingleOrDefault(x => x.Age > 21 && x.Name.StartsWith("Jo")).IsEnabled == "true";

有没有一种方法可以不必重复从第二个结果表达式中的列表中获取项的表达式?我能想到的唯一方法是添加额外的一行:

var item = model.People.SingleOrDefault(x => x.Age > 21 && x.Name.StartsWith("Jo"));
bool? foo = item == null ? null : item.IsEnabled == "true";

我已经读过了Microsoft docs,但看不到任何关于如何做到这一点的建议.我认为这目前是不可能的,这是一种耻辱!

推荐答案

您可以使用?运算符,如下面的C#8和更高版本.

bool? foo = model.People.SingleOrDefault(x => x.Age > 21 && x.Name.StartsWith("Jo"))?.IsEnabled.Equals("true");

或者你可以保留两条线的形式,我觉得它更清楚一些:

var item = model.People.SingleOrDefault(x => x.Age > 21 && x.Name.StartsWith("Jo"));
var foo = item?.IsEnabled.Equals("true"); // foo is a bool?

Csharp相关问答推荐

为什么Microsoft.AspNetCore. htttp.FormFile不实现IDDisposable?

Regex在c#中完全匹配

将修剪声明放入LINQ中

在. net毛伊岛窗口的深度链接已经创建""

无法解析数据库上下文的服务

在多对多关系上不删除实体

使用命令初始化可绑定属性

dotnet集合中内部数组的局部变量副本的用途是什么?'

WPF DataGrid中的三维数据

从Blob存储中提取tar.gz文件并将提取结果上载到另一个Blob存储

从c#列表中删除额外的对象&对象&>从ASP.NET WebForm返回json响应

反序列化私有成员

如何向事件添加成员

为什么我可以用硬编码的集合而不是变量来设置没有setter的IList属性的值?

交替的奇数

在被Interactive Server切换后,Blazor SSR页面无法正确加载JS

.Net MAUI,在将FlyoutPage添加到容器之前,必须设置添加构造函数导致Flyout和Detail"

使用ASP.NET MVC for Lemon Squeezy X-Signature创建散列

解决方案:延长ABP框架和ANGING OpenIddict中的令牌生命周期

为什么Visual Studio 2022建议IDE0251将我的方法设置为只读?