c# – AutoMapper:string to nullable int
发布时间:2020-12-15 08:45:31 所属栏目:百科 来源:网络整理
导读:这类似于我以前的帖子( AutoMapper: Int to String and back again),但这次涉及另一个方面是可以为空的int. 我的业务对象 public class Employee { .... public int? ReportsToEmployeeId {get; set;} ....} 我的WCF [DataContract(Name="Employee",Namespac
这类似于我以前的帖子(
AutoMapper: Int to String and back again),但这次涉及另一个方面是可以为空的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.但是我在null段上遇到了构建错误.该错误只是声明它具有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?. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |