3 回答

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個贊
如果您不想使用 automapper 或其他映射工具,您可以使用 select 和 new instance 這樣做,然后返回一個列表:
lstTest2 = lstTest.Select(e => new Test2()
{
Score = e.Score,
Name = e.Name
}).ToList();
在 Automapper 的情況下,您可以執(zhí)行以下操作:
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Test, Test2>();
});
IMapper iMapper = config.CreateMapper();
lstTest2 = iMapper.Map<List<Test>, List<Test2>>(lstTest);
在配置中定義類型轉(zhuǎn)換。將它從一種映射到另一種類型。
您當(dāng)然可以擴(kuò)展您的實(shí)現(xiàn)以使其通用。
文檔參考:
自動映射器:http : //docs.automapper.org/en/stable/Getting-started.html
Expressmapper:http ://expressmapper.org/

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個贊
您正在嘗試隱式轉(zhuǎn)換Test為Test2對象。更正代碼的一種簡單方法是構(gòu)造Test2對象:
lstTest2 = lstTest.ConvertAll(x => new Test2 { Name = x.Name, Score = x.Score });
即使底層結(jié)構(gòu)相同,也不能從Testto 轉(zhuǎn)換Test2。如果要顯式轉(zhuǎn)換,則必須定義轉(zhuǎn)換運(yùn)算符:
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貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個贊
與其擁有兩個名稱不同的完全不同的對象,不如研究如何進(jìn)行對象繼承。
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 關(guān)注
- 137 瀏覽
添加回答
舉報