gpt4 book ai didi

c# - AutoMapper:字符串到可为空的 int

转载 作者:太空狗 更新时间:2023-10-29 21:33:41 26 4
gpt4 key购买 nike

这与我之前的一篇文章 ( AutoMapper: Int to String and back again) 类似,但这次它涉及了另一个方面,涉及一个可为 null 的 int。

我的业务对象

public class Employee 
{
....
public int? ReportsToEmployeeId {get; set;}
....
}

我的 WCF

[DataContract(Name="Employee", Namespace="url")]
public class Employee
{
....
[DataMember(Order = 1)]
public string ReportsToEmployeeId {get; set;}
....
}

映射器

Mapper.CreateMap<Employee.Entity.Employee, Employee.Service.Entity.Employee>()
....
.ForMember(dest => dest.ReportsToEmployeeId,
opt => opt.MapFrom(src => src.ReportsToEmployeeId.HasValue ?
src.ReportsToEmployeeId.Value.ToString("D9") :
string.Empty))
....
.ReverseMap()
....
.ForMember(dest => dest.ReportsToEmployeeId,
opt => opt.MapFrom(src => string.IsNullOrWhitespace(src.ReportsToEmployeeId) ?
null :
int.Parse(src.ReportsToEmployeeId)))

我使用第一个 opt.MapFrom 将整数转换为字符串,并在必要时提供前导零。第二个使用扩展来测试字符串值是 null 还是空白,并将其分配给 null 或解析为整数以填充可为空的 int。但是,我在空段上遇到构建错误。该错误只是说明它有一个未知的 ForMember 或 MapFrom 方法。

Visual Studio 确实在 ReverseMap 之后的代码中确认 dest.ReportsToEmployeeId 是一个可为 null 的 int,所以不接受它似乎很奇怪。如果我将代码更改为:

....
.ForMember(dest => dest.ReportsToEmployeeId,
opt => opt.MapFrom(src => string.IsNullOrWhitespace(src.ReportsToEmployeeId) ?
int.Parse(src.ReportsToEmployeeId) :
int.Parse(src.ReportsToEmployeeId)))
....

看起来还不错。所以我知道是 null 到可空 int 的映射导致了问题。

我错过了什么?有没有更好的方法来解决这个问题?

最佳答案

我认为您看到的错误隐藏了实际问题,即编译器无法从条件中确定您想要的类型:

string.IsNullOrWhiteSpace(src.ReportsToEmployeeId) ?
null :
int.Parse(src.ReportsToEmployeeId)

在这里,编译器不知道你想要一个 Nullable<int>作为评估条件运算符的结果。 null没有类型,因此您需要将其转换为 int? :

string.IsNullOrWhiteSpace(src.ReportsToEmployeeId) ?
(int?)null :
int.Parse(src.ReportsToEmployeeId)

或者您可以使用 default(int?) , 或 new int?() , 或转换 int.Parse 的结果到int? .

关于c# - AutoMapper:字符串到可为空的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25311067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com