CS0556错误:自定义类型转换需涉及封闭类型问题求助
问题原因
C# 规定用户自定义转换操作符必须转换到或转换自定义该操作符的封闭类型(也就是你的SampleStartDateHistoryViewModel类本身),而你定义的List<SampleStartDateHistoryViewModel>不属于这个封闭类型,所以编译器抛出CS0556错误。
解决方案
方案1:直接使用LINQ转换(最简洁)
移除那个无效的List转换操作符,在需要转换集合的地方直接用LINQ的Select+ToList完成转换:
// 调用示例 List<SampleStartDateHistoryModel> modelList = GetModelList(); List<SampleStartDateHistoryViewModel> viewModelList = modelList .Select(m => (SampleStartDateHistoryViewModel)m) .ToList();
方案2:封装为静态方法
如果不想重复写LINQ代码,可以在SampleStartDateHistoryViewModel类里定义一个静态方法来处理集合转换:
public class SampleStartDateHistoryViewModel { public string modifiedBy; public static explicit operator SampleStartDateHistoryViewModel(SampleStartDateHistoryModel startDateRecord) { return new SampleStartDateHistoryViewModel { modifiedBy = startDateRecord.modifiedBy }; } // 新增静态方法处理集合转换 public static List<SampleStartDateHistoryViewModel> FromModelList(List<SampleStartDateHistoryModel> models) { return models.Select(m => (SampleStartDateHistoryViewModel)m).ToList(); } }
调用方式:
List<SampleStartDateHistoryViewModel> viewModelList = SampleStartDateHistoryViewModel.FromModelList(modelList);
方案3:使用扩展方法
可以写一个扩展方法,让集合对象直接调用转换方法,更符合流畅API风格:
// 定义一个静态扩展类 public static class SampleModelExtensions { public static List<SampleStartDateHistoryViewModel> ToViewModelList(this List<SampleStartDateHistoryModel> models) { return models.Select(m => (SampleStartDateHistoryViewModel)m).ToList(); } }
调用方式:
List<SampleStartDateHistoryViewModel> viewModelList = modelList.ToViewModelList();
内容的提问来源于stack exchange,提问作者Roman Ieromenko
相关产品推荐
相关产品推荐

