[英]A special C# Tree algorithm in Umbraco CMS
我正在创建一个特殊的树算法,我需要一些有关当前代码的帮助,但是在您看一下它之前,请让我解释一下它的真正含义。
我具有树结构,并且正在与一个节点(树中的任何节点(这些节点是Umbraco CMS类))进行交互,因此在交互时,我将树渲染到顶部(到根)并获取这些值在全局集合中(在这种情况下为List<Node>
)。 到目前为止,还可以,但是在与另一个节点进行其他交互时,我必须检查列表是否已包含单击节点的父级,如果它确实包含每个父级并且不包含此节点,则交互位于最低级水平(希望您还和我在一起?)。
不幸的是,在Umbraco CMS中调用Contains()
函数不会检查列表是否已包含值,即使我添加了Contains()
函数也无法使列表重新添加相同的值。
如果他已经遇到这样的问题,谁能在这里帮我? 我将Contains()
函数交换为Except
和Union
函数,它们产生相同的结果-它们确实包含重复项。
var currentValue = (string)CurrentPage.technologies;
List<Node> globalNodeList = new List<Node>();
string[] result = currentValue.Split(',');
foreach (var item in result)
{
var node = new Node(int.Parse(item));
if (globalNodeList.Count > 0)
{
List<Node> nodeParents = new List<Node>();
if (node.Parent != null)
{
while (node != null)
{
if (!nodeParents.Contains(node))
{
nodeParents.Add(node);
}
node = (Node)node.Parent;
}
}
else { globalNodeList.Add(node); }
if (nodeParents.Count > 0)
{
var differences = globalNodeList.Except<Node>(globalNodeList);
globalNodeList = globalNodeList.Union<Node>(differences).ToList<Node>();
}
}
else
{
if (node.Parent != null)
{
while (node != null)
{
globalNodeList.Add(node);
node = (Node)node.Parent;
}
}
else
{
globalNodeList.Add(node);
}
}
}
}
如果我理解您的问题,您只想查看特定节点是否是另一个节点的祖先。 如果是这样,只需(字符串)检查节点的Path属性。 path属性是逗号分隔的字符串。 无需自己构建列表。
仅myNode.Path.Contains(“,1001”)将起作用。
小话。
对于第二点,您可以执行以下操作:
var myList = Umbraco.Content(1001,1002,1003);
或带有数组/列表
var myList = Umbraco.Content(someNode.Path.Split(','));
并且由于要爬到根目录,可能需要添加.Reverse()
可以在文档中找到有关UmbracoHelper的更多信息: http ://our.umbraco.org/documentation/Reference/Querying/UmbracoHelper/
如果您使用的是Umbraco 4,则可以使用@ Library.NodesById(...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.