protected virtual IEnumerable <TreeNodeViewModel> CreateGraphCategoryChildren <TSymbolInfo>(GraphMemberCategoryNodeViewModel graphMemberCategory, bool isExpanded, Func <TSymbolInfo, TreeNodeViewModel> constructor, CancellationToken cancellation) where TSymbolInfo : SymbolItem { IEnumerable <SymbolItem> categoryTreeNodes = graphMemberCategory.CheckIfNull(nameof(graphMemberCategory)) .GetCategoryGraphNodeSymbols(); if (categoryTreeNodes.IsNullOrEmpty()) { return(Enumerable.Empty <TreeNodeViewModel>()); } cancellation.ThrowIfCancellationRequested(); var graphSemanticModel = graphMemberCategory.GraphSemanticModel; var graphMemberViewModels = from graphMemberInfo in categoryTreeNodes.OfType <TSymbolInfo>() where graphMemberInfo.SymbolBase.ContainingType == graphSemanticModel.Symbol || graphMemberInfo.SymbolBase.ContainingType.OriginalDefinition == graphSemanticModel.Symbol.OriginalDefinition orderby graphMemberInfo.SymbolBase.Name select constructor(graphMemberInfo); return(graphMemberViewModels); }