-1

以下のステートメントを使用して文字列(str)を取得したいのですが、機能しますが、このコントロールを作成するための提案はありますか?countは「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

親がnullのときに停止する場合は、カウントは必要ないかもしれません。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のタイプで列挙子を作成します
  • LINQを使用して、名前プロパティを選択します
  • 結果をReverse()
  • 文字列を使用します。スラッシュと結合して文字列を作成します
于 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 に答える