C# 自动映射:取消对可能为空引用的引用?空条件运算符不';无法使用自动映射
我正在为类C# 自动映射:取消对可能为空引用的引用?空条件运算符不';无法使用自动映射,c#,automapper,C#,Automapper,我正在为类A和B使用AutoMapper。该项目是启用了的.Net核心项目 在下面的映射代码中 public void Mapping(Profile profile) { // .... _ = profile?.CreateMap<A, B>() .ForMember(d => d.X, o => o.MapFrom(s => s.X.Value)); // warning on s.X } public void映射(配置文
A
和B
使用AutoMapper。该项目是启用了的.Net核心项目
在下面的映射代码中
public void Mapping(Profile profile)
{
// ....
_ = profile?.CreateMap<A, B>()
.ForMember(d => d.X, o => o.MapFrom(s => s.X.Value)); // warning on s.X
}
public void映射(配置文件)
{
// ....
_=配置文件?.CreateMap()
.ForMember(d=>d.X,o=>o.MapFrom(s=>s.X.Value));//s.X上的警告
}
它在s.X
上有以下警告:
警告CS8602取消引用可能为空的引用
如何在不使用#pragma warning disable CS8602
的情况下消除警告
我尝试使用Null条件将o.MapFrom(s=>s.X.Value)
更改为o.MapFrom(s=>s.X?.Value)
。但是它在s.X?.Value
上得到了以下错误
错误CS8072表达式树lambda不能包含null传播运算符
由于
MapFrom
接受表达式而不是Func
,因此不能使用Null条件运算符。这不是AutoMapper的限制,而是System.Linq.Expressions
命名空间中的表达式树和C#编译器的限制
但是,可以使用三元运算符:
_ = profile?.CreateMap<A, B>()
.ForMember(d => d.X, o => o.MapFrom(s => s.X == null ? null : s.X.Value));
(并最终用???指定null时的值)这将获得严重性错误错误CS8072表达式树lambda可能不包含null传播运算符。
是的,我想知道Automapper是否已更新,以允许该运算符出现在MapFrom
表达式中。合并运算符在MapFrom
中不起作用,至少在Automapper.IIRC的旧版本中,您可以将合并运算符与AutomappersResolve…
方法一起使用,但不能使用Map…
方法。@ca9163d9:Oaky,我明白了。显然,MapFrom
有一个表达式
参数。Epression树不能表示空条件;然而,它们访问三元表达式。请看我的更新答案。我已经删除了CS8602,这个警告很可怕,甚至一些特定的防护措施(如Guard/Sure fail early)都被忽略了,因为它无法判断,所以需要很多条件。这会导致代码被污染/难以阅读,人们会浪费时间。
_ = profile?.CreateMap<A, B>()
.ForMember(d => d.X, o => o.MapFrom(s => s.X == null ? null : s.X.Value));