【发布时间】:2014-01-14 09:00:03
【问题描述】:
我创建了一个 IEnumerable 方法,该方法接受一个 PERSON 类型的 IEnumerable,它交换员工的名字和姓氏(他们目前正在将它们添加到单个字段中的数据库中(“John Smith”、“Craig Robertson” ) 等。
我有另一个名为 ProjectPerson 的 IEnumerable,它具有相似但不同的数据,我也想交换其名字和姓氏。
两个 IEnumerables 都有“名称”作为字段,因此代码对两者都适用,我只想能够重复使用此代码,而不会使用 IEnumerabe<Person> 和另一个使用 IEnumerable<ProjectPerson> 但相同的代码创建重载在每个里面。
有没有办法设置不同类型可以使用的 IEnumerable 方法?也许将类型作为参数传递然后强制转换?
我创建了一个名为 IPerson 的接口:
public interface IPerson
{
string Name { get; set;}
}
我有以下几点:
public class Person: IPerson {..}
public class ProjectPerson: IPerson {..}
我的方法如下所示:
private void IEnumerable<IPerson> SwapFirstAndLastNames(IEnumerable<IPerson> persons)
{
foreach (var employee in persons)
{
//do the swapping
}
return persons;
}
我在类的其他地方使用这两行调用这个方法:
_projectPerson = SwapFirstAndLastNames(projectpersons)
_person = SwapFirstAndLastNames(person);
使用上述方法,我在该方法上收到错误消息“无法从 ProjectPerson 转换为 IPerson(与 Person 到 IPerson 相同),并且“与 SwapFirstAndLastNames(IEnumerable) 匹配的最佳重载方法有一些无效参数。
person 和 projectPerson 都是 IENumerable 类型(下划线的也是),并且每个中使用的数据都用于其他地方来填充数据网格等。所以我基本上是在寻找一种采用任何类型的 IEnumerable 的方法,交换 IEnumerable.Name 字段(我已经有了执行此操作的代码),然后返回交换的 IEnumerable 数据。我在单一类型上工作。
【问题讨论】:
标签: c# generics ienumerable