小编ian*_*982的帖子

创建一个采用泛型类型的IEnumerable类型的方法

我创建了一个IEnumerable方法,它接受一个类型为PERSON的IEnumerable,它交换员工的名字和姓氏(他们目前将它们添加到一个字段中的数据库中("John Smith","Craig Robertson")等.

我有另一个名为ProjectPerson的IEnumerable,它有类似但不同的数据,我想交换它们的名字和姓氏.

IEnumerables都有"Name"作为字段,因此代码适用于两者,我只是希望能够重新使用此代码而不创建重载,IEnumerabe<Person>而另一个IEnumerable<ProjectPerson>在每个内部使用相同的代码.

有没有办法设置可以被不同类型使用的IEnumerable方法?也许传入Type作为参数然后投射?

我创建了一个名为IPerson的接口:

    public interface IPerson
    {
        string Name { get; set;}
    }
Run Code Online (Sandbox Code Playgroud)

我有以下内容:

public class Person: IPerson {..}

public class ProjectPerson: IPerson {..}
Run Code Online (Sandbox Code Playgroud)

我的方法如下所示:

private void IEnumerable<IPerson> SwapFirstAndLastNames(IEnumerable<IPerson> persons)
{
    foreach (var employee in persons)
    {
        //do the swapping
    }
    return persons;
}
Run Code Online (Sandbox Code Playgroud)

我使用这两行在类中的其他地方调用此方法:

_projectPerson = SwapFirstAndLastNames(projectpersons) 

_person = SwapFirstAndLastNames(person);
Run Code Online (Sandbox Code Playgroud)

使用上面的方法我得到一个错误,该方法说"无法从ProjectPerson转换为IPerson(与Person转换为IPerson)"以及"SwapFirstAndLastNames(IEnumerable)的最佳重载方法匹配具有一些无效参数.

person和projectPerson都是IENumerable类型(带下划线的那些),并且每个中使用的数据在别处用于填充数据网格等.所以我基本上寻找一个采用任何类型的IEnumerable的方法,交换IEnumerable.Name字段(我已经有了代码来执行此操作),然后返回交换的IEnumerable数据.我有一个单一类型的工作.

c# generics ienumerable

5
推荐指数
4
解决办法
1239
查看次数

标签 统计

c# ×1

generics ×1

ienumerable ×1