3 回答

TA贡献1834条经验 获得超8个赞
如果您不想使用 automapper 或其他映射工具,您可以使用 select 和 new instance 这样做,然后返回一个列表:
lstTest2 = lstTest.Select(e => new Test2()
{
Score = e.Score,
Name = e.Name
}).ToList();
在 Automapper 的情况下,您可以执行以下操作:
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Test, Test2>();
});
IMapper iMapper = config.CreateMapper();
lstTest2 = iMapper.Map<List<Test>, List<Test2>>(lstTest);
在配置中定义类型转换。将它从一种映射到另一种类型。
您当然可以扩展您的实现以使其通用。
文档参考:
自动映射器:http : //docs.automapper.org/en/stable/Getting-started.html
Expressmapper:http ://expressmapper.org/

TA贡献1779条经验 获得超6个赞
您正在尝试隐式转换Test为Test2对象。更正代码的一种简单方法是构造Test2对象:
lstTest2 = lstTest.ConvertAll(x => new Test2 { Name = x.Name, Score = x.Score });
即使底层结构相同,也不能从Testto 转换Test2。如果要显式转换,则必须定义转换运算符:
class Test2 {
// all code of class Test2
public static explicit operator Test2(Test v)
{
return new Test2 { Name = v.Name, Score = v.Score };
}
}
然后你可以投ConvertAll:
lstTest2 = lstTest.ConvertAll(x => (Test2)x);

TA贡献1816条经验 获得超6个赞
与其拥有两个名称不同的完全不同的对象,不如研究如何进行对象继承。
class Program
{
static void Main(string[] args)
{
List<TestBase> lstTest = new List<TestBase>();
lstTest.Add(new Test { Name = "j", Score = 2 });
lstTest.Add(new Test2 { Name = "p", Score = 3 });
}
}
class TestBase
{
private string name;
private int score;
public string Name
{
get { return name; }
set { this.name = value; }
}
public int Score
{
get { return score; }
set { this.score = value; }
}
}
class Test : TestBase { }
class Test2 : TestBase { }
- 3 回答
- 0 关注
- 149 浏览
添加回答
举报