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问题定义.任何人都可以开导我吗?
提前致谢,
史蒂夫
当您使方法通用时,您需要添加类型约束.如果不这样做,则无法访问,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)
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |