C#中将List<Account>赋值给Payment_Details数组时转换错误如何解决
错误原因
Cast<T>() 方法仅支持以下几种转换场景:
- 引用类型的向上/向下转型(即两个类型存在继承关系)
- 装箱、拆箱转换
- 类型中预先定义了隐式/显式转换运算符
你项目内自定义的Account类和Web服务生成的Payment_Details类是完全独立的两个类型,既无继承关系也没有预定义转换规则,所以直接调用Cast<Payment_Details>()会抛出强制转换失败的异常。
解决方案
方案1:手动属性映射(推荐,适合字段少的场景)
直接用LINQ的Select方法遍历每个Account实例,手动为Payment_Details的属性赋值,代码示例:
vendReg.RequestDetails = registration.Accounts.Select(acc => new Payment_Details { Bk_Code = acc.Code, Bk_Name = acc.Name, Bk_Address = acc.Address }).ToArray();
这种方式无需引入第三方依赖,执行效率最高,也方便处理字段映射的特殊逻辑。
方案2:使用对象映射库(适合字段多、映射场景多的项目)
如果项目中存在大量类似的类转换场景,可以引入AutoMapper等映射库,预先配置映射规则后自动完成转换:
- 先安装AutoMapper NuGet包
- 配置映射规则:
var config = new MapperConfiguration(cfg => cfg.CreateMap<Account, Payment_Details>() .ForMember(dest => dest.Bk_Code, opt => opt.MapFrom(src => src.Code)) .ForMember(dest => dest.Bk_Name, opt => opt.MapFrom(src => src.Name)) .ForMember(dest => dest.Bk_Address, opt => opt.MapFrom(src => src.Address)) ); var mapper = config.CreateMapper();
- 执行转换:
vendReg.RequestDetails = mapper.Map<Payment_Details[]>(registration.Accounts);
内容的提问来源于stack exchange,提问作者hopeforall
相关产品推荐
相关产品推荐

