C#6中带null的条件

C#6中带null的条件,c#,c#-6.0,C#,C# 6.0,我有以下代码行: Project = x.Project == null ? null : new Model { ... } 在C#6中,有没有办法缩短代码 我一直在看一些?示例但对于这种情况,我找不到一个更短的解决方案…不,它尽可能短 然而,基于这段代码,您实际上应该在上面有一个if条件来检查x的值 if(x != null) Project = x.Project == null ? null : new Model { ... } else Project = null

我有以下代码行:

Project = x.Project == null ? null : new Model { ... }
在C#6中,有没有办法缩短代码


我一直在看一些?示例但对于这种情况,我找不到一个更短的解决方案…

不,它尽可能短

然而,基于这段代码,您实际上应该在上面有一个if条件来检查x的值

if(x != null)
    Project = x.Project == null ? null : new Model { ... }
else
    Project = null;
您可以将此更改为:

Project = x?.Project == null ? null : new Model { ... }

按原样,您的代码尽可能短。但是,如果类
项目
基于一个
公共模型ToModel(…){}
方法,您可以这样做

Project = x.Project?.ToModel(...);
更新:作为,您还可以将
.ToModel(
作为扩展方法

public static class ExtensionMethods
{
    public static Model ToModel(this Project p, ...)
    {
        return new Model { ... };
    }
}
语法仍然是

Project = x.Project?.ToModel(...);

不是更短,而是使用Linq的替代解决方案:

Model m = new Project[] { x.Project }
       .Where(p => p != null)
       .Select(p => new Model { ... })
       .FirstOrDefault();

如果
Project
有一个
.ToModel(…)
函数,你可以,但我不这么认为。不,它没有一个.ToModel()…是的,我一直在研究新的C#6.0功能,但对于这个例子,我找不到任何可以应用的功能。不,它尽可能短。你能添加一个ToModel扩展方法吗?如果输入为null,那么你可以返回
null
,只要有
Project=x.Project.ToModel()
@JonSkeet:在有限的情况下,它可能很有用——但我认为这种特殊的方法不符合要求。现在我们有了
?。
,应该使用它,以免有人不得不三思为什么
x.Project.ToModel()
不需要检查
null
。这不是更短的…:-)如果您的代码中有您没有发布的If条件,那么它会更短。您只需使用?做记号