代码之家  ›  专栏  ›  技术社区  ›  Yaroslav Yakovlev

使用接口转换具有扩展名和lambda的对象集合

  •  0
  • Yaroslav Yakovlev  · 技术社区  · 14 年前

    我有一些对象,如用户、地址等,我使用扩展方法将它们转换为业务对象:

    public static UserModel ToPresentationForm(this User pUser)
        {
            return new UserModel
            {
              ...
              map data
              ...
            };
        }
    

    public static List<UserModel> ToPresentationForm(this List<User> pUserColl)
        {
            return pUserColl.Select(x => x.ToPresentationForm()).ToList();
        }
    

    我在想,如果我添加了一些接口,比如IPresentationForms,并且能够使用它来编写方法,比如

    public static List<T> ToPresentationForm(this List<IPresentationForms> pTemplate)
        {
            return pUserColl.Select(x => x.ToPresentationForm()).ToList();
        }
    

    P、 使用C#4.0的S.Im

    1 回复  |  直到 14 年前
        1
  •  1
  •   Gabe Timothy Khouri    14 年前

    不幸的是,因为 User UserModel

    另一方面,让我们这么说 用户 用户模型 IUser 接口。然后你可以有一个这样的界面:

    interface IPresentationForms<T>
    {
        T ToPresentationForm();
    }
    

    你可以定义 用户 这样地:

    class User: IUser, IPresentationForms<IUser>
    {
        public IUser ToPresentationForm()
        {
            return new UserModel(...);
        }
        .... // implement IUser
    }
    

    可以让你定义 ToPresentationForm 像这样的:

    public static List<T> ToPresentationForm<T>(this IEnumerable<T> pTemplate)
        where T : IPresentationForms<T>
    {    
        return pTemplate.Select(x => x.ToPresentationForm()).ToList();    
    }    
    

    为了避免一些额外的方法,这需要做很多工作。