현재 ParentId 속성을 통해 서로에 대한 참조가있는 객체의 플랫 목록에서 계층 구조를 구성하기 위해 IEnumerable<T>
을 구현하는 클래스를 만들려고합니다. 내가 yield 문에 대해, 그래서이linq에서 "새로 선택"은 평가 /로드를 트리거합니까?
IEnumerable<Tab> tabs = GetTabs();
IEnumerable<TabNode> tabNodes = tabs.AsHierarchy().WithStartLevel(2).WithMaxDepth(5);
처럼 뭔가를 할 수 그래서 이것에 대한 유창 인터페이스를 작성하고 싶습니다, 나는 내 NodeHierarchy : IEnumerable<TabNode>
클래스 내에서 같은 것을 할 수 있는지 궁금 :
private IEnumerable<TabNode> _nodes;
public NodeHierarchy(IEnumerable<Tab> tabs)
{
_nodes = CreateHierarchy(tabs);
}
public IEnumerable<TabNode> CreateHierarchy(IEnumerable<Tab> tabs)
{
/* About this block: I'm trying to find the top level
nodes of the first tab collection, maybe this is done poorly? */
var tabIds = tabs.Select(t => t.TabID);
IEnumerable<TabNode> nodes = from tab in tabs
where !tabIds.Contains(tab.ParentId)
select new TabNode {
Tab = node,
ChildNodes = CreateHierarchy(tabs, node.TabID, 1),
Depth = 1 };
return nodes;
}
또는 내가 이런 식으로 뭔가를해야 할 것입니다 여부를 :
private IEnumerable<TabNode> _nodes;
public NodeHierarchy(IEnumerable<Tab> tabs)
{
_nodes = CreateHierarchy(tabs);
}
public IEnumerable<TabNode> CreateHierarchy(IEnumerable<Tab> tabs)
{
var tabIds = tabs.Select(t => t.TabID);
IEnumerable<Tab> startingNodes = from tab in tabs
where !tabIds.Contains(tab.ParentId)
select tab;
foreach(Tab node in startingNodes)
{
yield return
new TabNode()
{
Tab = node,
ChildNodes = CreateHierarchy(tabs, node.TabID, 1),
Depth = 1
};
}
탭 대신 공백을 사용하여 코드를 다시 포맷 할 수 있습니까? 지금은 꽤 읽을 수 없습니다. –
그래, 고마워, 내가 일하고있어 ... 복사 붙여 넣기 작업이 실제로 여기에서 작동하지 않았다 :) – kitsune
지금 고쳐야한다 ... – kitsune