-1

我想通过使用下面的语句来获得一个字符串(str),它可以工作,但是有什么建议来制定这个控件?因为计数可以是“n”。

 if (a.count== 0)
 {
    str += a.Name;
 }
    else if (a.count== 1)
 {
    str += a.Parent.Name + "/" +  a.Name;
 }
 else if (a.count== 2)
 {
    str += a.Parent.Parent.Name + "/" + a.Parent.Name + "/" + a.Name;
 }
 else if (a.count== 3)
 {
    str += a.Parent.Parent.Parent.Name + "/" +a.Parent.Parent.Name + "/" + a.Parent.Name + "/" + a.Name;
 }
 . 
 .
 .
 else if(a.count = n)
 {
         //n times..
 }
4

4 回答 4

4

类似于以下内容(但您需要使用它才能使其工作):

int count = a.count;
var current = a;
for (int i = 0; i <= count; i++)
{
    str += (i > 0 ? "/" : string.empty) + current.Name;
    current = current.Parent;
}

显然有很多极端情况,您需要考虑到这些情况。

于 2012-07-29T21:03:52.040 回答
2

如果您在 parent 为空时停止,则可能不需要 count ,我认为使用 Path.Combine 更优雅:)

 var node = a;
 while (node != null) {
    str = Path.Combine(node.Name, str);
    node = node.Parent;
 }

或者您可以使用扩展方法为您计算它:

 public static class Extension {

      public static string GetFullPath( this YourNodeType node)
      {
           return (node.Parent == null) 
             ? node.Name 
             : Path.Combine( node.Parent.GetFullPath(), node.Name);
      }
 }
于 2012-07-29T21:14:02.880 回答
1

我会

  • 在返回自身及其父层次结构的 A 类型上创建一个 Enumerator
  • 使用 LINQ 选择名称属性
  • 反向()结果
  • 使用 string.Join 和斜线来创建字符串
于 2012-07-29T21:03:13.507 回答
0

你可以使用这个:

object unknownparent;
for(int i = 0; i< n; i++)
{
unknownparent = a.Parent;
    for(int j = i; j<n; j++)
    {
        unknownparent = ((typeofa)unknownparent).Parent;
    }

    str += ((typeofa)unknownparent).Parent.Name + "/";

}
str += a.Name;
于 2012-07-29T21:02:19.623 回答