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条件,那么它会更短。您只需使用?做记号