2010-03-17 3 views
5

for/foreach/while 루프를 사용하지 않고 코드/라인을 여러 번 호출하는 방법이 있습니까? 예를 들어for/foreach/while을 사용하지 않고 메소드를 루핑하기

, 내가 루프를 사용하는 경우 : 내가 '난'과 사용하지 않는 전화 드렸습니다 코드의

int numberOfIterations = 6; 
for(int i = 0; i < numberOfIterations; i++) 
{ 
    DoSomething(); 
    SomeProperty = true; 
} 

의 선 내 의견으로는 전체 루프 선언은 내가 '무엇을 숨 깁니다 나는하려고 애쓰다. 이것은 foreach에 대해서도 동일합니다.

나는 그것을 사용할 수있는 루프 문이 있는지 궁금 보이는 뭔가 같은 :

do(6) 
{ 
    DoSomething(); 
    SomeProperty = true; 
} 

그것은 내가 그냥 코드 6 번 실행할 정말 분명하고 소음이 인덱스 인스턴스화를 포함하는 1을 추가 없다 어떤 임의의 변수에.

는 학습 연습으로 나는 정적 클래스 및 방법 작성했습니다 :

Do.Multiple(int iterations, Action action) 

자부하는 규모로 매우 높은 점수를 제외한 작품과 내 동료 승인하지 않을거야.

나는 아마도 까다롭기 만하다. for 루프는 확실히 알아볼 만하지만, 학습의 요점으로는 (클리너) 대안이 있는지 궁금하다. 감사.

는 (I는이 스레드를 살펴 했어,하지만 같은 매우 아니다)을 for 루프 당신이 뭘하려는 건지 숨기지 않습니다, 사실 Using IEnumerable without foreach loop

+4

for 루프가 붙어 있습니다. 그렇게하면 모든 사람들은 그것이 무엇인지 알게됩니다. –

+2

흠, 동일한 코드를 6 번 실행하고 싶습니까? 단지 시간을 낭비하려고합니까, 아니면 실행 된 코드에 부작용이 있습니까? 두 경우 모두 부끄러운 줄 알았습니다. –

+0

나는 for 루프에 대해 무엇이 깨끗하지 않은지 정직하게 보지 못한다. –

답변

12

.
코드를 읽는 사람은 누구나 표준 for 루프에 익숙하며 현재 진행중인 작업을 즉시 이해할 수 있습니다.

public static void Times(this int iterations, Action action) 
{ 
    for (int i = 0; i < iterations; i++) 
    { 
     action(); 
    } 
} 
... 
6.Times(() => { 
    DoSomething(); 
    SomeProperty = true; 
}); 

을하지만 확실히 for 루프 스틱 것 :

+1

나는 100 % 동의하지만'numOfIterations'를 제거 할 것입니다. 왜냐하면 실제로 그것을 더 명확하게하지 않기 때문입니다. – ChaosPandion

+0

나는 그 질문에서 가짜 예제의 일부로 그것을 사용했다. 그러나 유효한 점 – RichK

10

당신은 그것을 확장 방법을함으로써 텐션 규모에 더 높은 점수를 할 수있다. 그것은 관용적이고 잘 알려진 방법입니다.

+0

그것을 좋아해라. .. 언젠가 그것을 사용할 변명을 찾아야한다 :) – slugster

+0

정말로 멋지다. 거의 유혹입니다 : p – RichK

+1

이것은 절대적으로 갈 길입니다. 우리는 팀에서 표준으로 만들었습니다. – DRBlaise

0

방법에 대해 할 일 .... 때까지

루프 내부 카운터를 사용하여 카운터가 6

또는 경우-다음 문에 도달 할 때까지 그것을 루프를하거나 ... 경우 카운터. 값이 6이면 루프에서 벗어납니다.

저는 프로그래밍 전문가는 아니지만 설정된 횟수만큼 수행해야하는 작업이있는 경우 루프의 기능인지 여부에 관계없이 어딘가에 카운터가 필요합니다. 카운터로 만들 수 있습니다.

2
광경

private MethodDelegate MultiMethod(MethodDelegate m, int count) { 
    MethodDelegate a; 
    if (count > 0) { 
    a = m; 
    a += MultiMethod(m, --count); 
    } else { 
    a = delegate { }; 
    } 
    return a; 
} 

에서

하지 루프 당신은 호출을 위해 좋은 구문을 얻을!

MultiMethod(action, 99)(); 
관련 문제