我有一些对象,如用户,地址等,我使用扩展方法将它们转换为业务对象:
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.S。我正在使用C#4.0
答案 0 :(得分:1)
不幸的是,由于User
和UserModel
之间可能没有任何关系,因此无法创建一个界面来执行您想要的操作。
另一方面,假设User
和UserModel
都实现了IUser
接口。然后你可以有这样的界面:
interface IPresentationForms<T>
{
T ToPresentationForm();
}
您可以像这样定义User
:
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();
}
要避免一些额外的方法,还有很多工作要做。