【发布时间】:2010-10-13 16:09:38
【问题描述】:
我有一些对象,如用户、地址等,我使用扩展方法将它们转换为业务对象:
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();
}
不确定如何为方法类型提供参数以使其通用。所以实际的问题是,如何做到这一点。
附:我使用 C# 4.0
【问题讨论】:
-
在你的最后一个例子中,你有
.Select(x => x.ToPresentationForm())。你期望.ToPresentationForm调用什么?您是否期望发生一些动态的事情,以便它调用您为给定的具体类型所做的正确扩展方法? -
实际上是的,从示例中您可以看到,实际上我转换集合所做的只是复制粘贴相同的代码,只需指定类型。所以我想也许有办法以其他方式指定类型。
-
什么是
T?为什么方法名为ToPresentationForm但它需要一个IPresentationForm的列表——这似乎没有意义。 -
柯克,it
s not a code that will work. I just posted how its 现在用 2 种方法完成了。每个新类型都需要 2 种方法,其中一种对所有类型几乎相同。所以问题是如何使它通用。我的代码示例是一段无法正常工作的代码,我只是把它放在最后展示我想要的东西(一种方法可以转换所有类型的集合)
标签: c#-4.0 lambda extension-methods generics