2012-07-29 2 views
-1

아래 문을 사용하여 문자열 (str)을 가져오고 싶지만이 컨트롤을 공식화하기위한 제안은 있습니까? count는 "n"이 될 수 있기 때문에 입니다.이 C# 코드를 단순화하는 방법은 무엇입니까?

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.. 
} 
+1

"공식화"란 무엇을 의미합니까? 그것은 표준 문구가 아닙니다. – Oded

+0

"루프"를 조사하거나 "재귀"를 시도해야합니다 –

+0

다시 말하면, 재귀 함수 나 루프를 사용하여 적은 코드 행으로 만들 수 있습니까 ( –

답변

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; 
} 

분명히 거기 당신이 고려해야 할 코너 케이스가 많이 있습니다. 부모가 null 때, 을 중지하면

+0

시도 할 것입니다. , 정말 멋지다 :) –

+0

루프에서 문자열을 연결하는 것은 나쁜 생각이다. 대신에'StringBuilder'를 사용해야한다. 또한 잘못된 순서로 부품을 결합하지 않습니까? – svick

+0

@svick 완전히 동의합니다. 그래서 코드의 최종 버전이 아니라 단지 아이디어라고 썼습니다. 개선의 여지가 많습니다. 그 중 하나는 문자열 연결 부분입니다. –

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; 
+0

Sergiu, 이것은 작동하지 않는다. 질문의 코드가 컨트롤의 조상 이름에서 문자열을 작성하는 방법에 주목하십시오. –

+0

나는 a를 생각해. 부모님은 내면을 위해 하나 더 사용해야 해. 그렇지? –

+0

대답을 수정했습니다 ... –

1

내가

  • 이 이름을 선택 LINQ 자체 및 상위 계층
  • 을 반환하는 유형에 열거자를 만들 것 -property
  • 결과를 반대로() 결과
  • 슬래시와3210
  • 사용 string.Join 문자열을 다음과 같은
+0

이것은 최선의 방법 일 수 있지만 적어도 오늘은 .. 힘들 것 같습니다.하지만 빠른 답장을 보내려면 flx .. –

2

어쩌면 필요하지 않습니다 수와 내가 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); 
     } 
} 
관련 문제