我有我的库对象,例如ObjA,ObjB,ObjC,ObjD ..
我还有从Web服务引用创建的对象,SvcA,SvcB,SvcC,SvcD ..
请注意,ObjA和SvcA类似于,它们具有相似的字段(但名称不完全相同)
我有以下ObjA和SvcA映射代码。
(write (mymax '(3 5 6 7 8)))
我无法修改Svc_类。但我可以修改Obj_类。如果我可以做到这两点,我想我可以从特定对象派生这些类并使用接口。
我想知道是否有可能避免重复所有这些代码用于SvcB-ObjB,SvcC-ObjC,SvcD-ObjD ..映射。
答案 0 :(得分:0)
Automapper可能是这项工作的最佳工具:
答案 1 :(得分:0)
您可以在此处将GetSvcList
和GetLibList
转换为通用。以下是各种Obj和Svc的复制方法。
public static IList<Tobj> GetLibList<Tobj, Tsvc>(Tsvc[] svcList) where Tobj : new()
{
IList<Tobj> objList = new List<Tobj>();
foreach (Tsvc svcObject in svcList)
{
objList.Add((Tobj)Activator.CreateInstance(typeof(Tobj), svcObject));
}
return objList;
}
public static Tsvc[] GetSvcList<Tsvc, Tlib>(IList<Tlib> libList)
{
IList<Tsvc> svcList = new List<Tsvc>();
foreach (Tlib libObj in libList)
{
// Check for null as GetMethod could throw null if method not found.
svcList.Add((Tsvc)(typeof(Tlib).GetMethod("getSvcObject").Invoke(libObj, null)));
}
return svcList.ToArray<Tsvc>();
}
由于您还没有提供有关您的Obj课程的详细信息,因此无法向您提供任何建议。但是如果你有相同的属性,那么Automapper可能是映射具有相同名称的对象属性的绝佳选择。