Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射:取消对可能为空引用的引用?空条件运算符不';无法使用自动映射_C#_Automapper - Fatal编程技术网

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的旧版本中,您可以将合并运算符与Automappers
Resolve…
方法一起使用,但不能使用
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));