我想从
public class Party
{
public string Type { get; set; }
public string Name { get; set; }
public string Status { get; set;}
}
并转换为
public class Contact
{
public string Type { get; set; }
public string Name { get; set; }
public string Status { get; set;}
public string Company {get;set;}
public string Source {get;set;}
}
我尝试使用这种扩展方法
public static class EnumerableExtensions
{
public static IEnumerable<TTo> ConvertTo<TTo, TFrom>(this IEnumerable<TFrom> fromList)
{
return ConvertTo<TTo, TFrom>(fromList, TypeDescriptor.GetConverter(typeof(TFrom)));
}
public static IEnumerable<TTo> ConvertTo<TTo, TFrom>(this IEnumerable<TFrom> fromList, TypeConverter converter)
{
return fromList.Select(t => (TTo)converter.ConvertTo(t, typeof(TTo)));
}
}
我收到此错误TypeConverter无法将“聚会”转换为“联系”
var parties = new List<Party>();
parties.Add(new Party { Name = "name 1", Status = "status 1" });
parties.Add(new Party { Name = "name 2", Status = "status 2" });
var results = parties.ConvertTo<Contact, Party>().ToList();
我在这里想念什么?
最佳答案
类型Party和类型联系人之间没有直接转换(基于多态或继承)。
您需要为您的类型实现TypeConverter,以便.NET知道如何在这两种类型之间进行转换:
MSDN - TypeConverter Class
MSDN - How to Implement a TypeConverter
创建TypeConverters后,必须使用TypeConverterAttribute装饰两个类,以便框架可以在运行时获取TypeConverter的实例:
public class PartyTypeConverter : TypeConverter
{
// Implementation
}
[TypeConverter(typeof(PartyTypeConverter)]
public class Party
{
public string Type { get; set; }
public string Name { get; set; }
public string Status { get; set; }
}
您还可以尝试使用LINQ模仿(我猜的是)期望的行为(即使您会失去通用能力):
var contacts = parties.Select(p => new Contact {
Type = p.Type,
Name = p.Name,
Status = p.Status
});