将类型特定方法重写为泛型

Ste*_*ard 0 c# generics collections

我有一个方法(如下所示),我发现可以在其他地方的代码中重用,如果我可以把它变成泛型方法,但我正在努力学习语法并且可以使用一些帮助:

样品:

private List<IndexEntry> AddParentReferences(List<IndexEntry> listWithoutParents)
        {
            List<IndexEntry> listWithParents = new List<IndexEntry>();

            foreach (IndexEntry currentEntry in listWithoutParents)
            {
                if (currentEntry.SubEntries == null || currentEntry.SubEntries.Count < 1)
                {
                    listWithParents.Add(currentEntry);
                    continue;
                }
                AddIndividualParentReference(currentEntry);
                listWithParents.Add(currentEntry);
            }
            return listWithParents;
        }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它是一个简单的方法,它接收List of IndexEntry类型并枚举该列表添加对层次结构中父项的引用.我发现有类似的设计类型,也需要在各个点添加这种引用.我想修改这段代码以获取一个List并返回一个合适的List,其中T是传入的类型.这看起来像是一个直接的写法,但我想我可能在我的方法中缺少一个简单的sytax问题定义.任何人都可以开导我吗?

提前致谢,

史蒂夫

jas*_*son 5

当您使方法通用时,您需要添加类型约束.如果不这样做,则无法访问,currentEntry.SubEntries因为编译器无法推断出T具有此类属性的内容.因此,定义一个接口类型,如下所示,然后继续这样做:

List<T> AddParentReferences<T>(List<T> listWithoutParents) where T : IIndexEntry {
    List<T> listWithParents = new List<T>();

    foreach (T currentEntry in listWithoutParents) {
        if (currentEntry.SubEntries == null || currentEntry.SubEntries.Count < 1) {
            listWithParents.Add(currentEntry);
            continue;
        }
        AddIndividualParentReference(currentEntry);
        listWithParents.Add(currentEntry);
    }
    return listWithParents;
}
Run Code Online (Sandbox Code Playgroud)

以下是完成上述工作所需的最小界面:

interface IIndexEntry {
    IList<IIndexEntry> SubEntries;
}
Run Code Online (Sandbox Code Playgroud)