类似对象的通用方法或继承

时间:2015-10-15 22:40:01

标签: c# generics

我有我的库对象,例如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 ..映射。

2 个答案:

答案 0 :(得分:0)

Automapper可能是这项工作的最佳工具:

http://automapper.org/

答案 1 :(得分:0)

您可以在此处将GetSvcListGetLibList转换为通用。以下是各种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可能是映射具有相同名称的对象属性的绝佳选择。