2012-11-15 2 views
3

VB.Net 4.0에서는 비슷한 코드를 반복해야하는 상황이 있지만 코드의 복잡성으로 인해 단순화 할 서브 루틴을 만들 수 없습니다. 블록 범위에서 변수를 선언하고 범위를 벗어나서 반복 할 수 있기를 원합니다. 내 현재 방법은 이와 같은 작업을 수행하는 것입니다.vb.net 인공 범위

If True Then 
    Dim A = ... 
    Dim B = ... 
    (Code using A & B) 
End If 

... 그리고 내가 원하는만큼 반복하십시오. 이 일이 너무 작동

...

Try 
    Dim A = ... 
    Dim B = ... 
    (Code using A & B) 
Finally 
End Try 

그렇지 않으면 내가 각 변수에 고유 한 이름을 제공해야 ...

Dim A1 = ... 
Dim B1 = ... 
(Code using A1 and B1) 
Dim A2 = ... 
Dim B2 = ... 
(Code using A2 and B2) 

... 위험한 코드를 반복하게하는 잊지 수 있기 때문에 코드를 복사 할 때 변수 이름을 변경하려면. 당신은 C#에서 그것을 할 수

...

{ 
    int A = ... 
    int B = ... 
    (Code using A & B) 
} 

이 방법을 블록을 만들 수 VB.Net있는 방법이 있나요?

+1

과 함께 사용할 수 있지만 한 번에 하나의 변수 만 허용하고 직관적으로 중첩하지는 않습니다. 그렇지 않으면 나는 그것이 존재하지 않는다고 말하지 않을 것이다. 그러나 오랫동안 VB로 작업 해왔고, 당신이 제안한 범위 구분자를 보지 못했다. –

+0

제안 된 반복 코드 블록마다 A 및 B 변경 유형을 수집합니까? 그렇다면 왜 변수에 대해 동일한 이름을 유지하고 싶습니까? 반복 코드 블록마다 유형이 변경되지 않으면 메소드의 맨 위에 변수를 선언하고 다시 사용하는 것이 어떨까요? – BlackMael

+0

@BlackMael : 형식이 동일하게 유지되지만 다음 블록에서 값을 다시 사용할 수 없도록 범위 밖으로 벗어나기를 원합니다. –

답변

2

일본어 사이트에서이 답변을 발견했습니다. http://www.ilovex.co.jp/Division/ITD/archives/2007/11/with_nothing.html (일본어 번역)

나는 우리가 그것에 대해 생각하면 생각에서

With Nothing 
    Dim A = ... 
    Dim B = ... 
    (Code using A & B) 
End With 

, 그것은 하지 더 나은 여부 With 문을 사용합니다. 왜냐하면, With 문은 순서로 사용되어 코드를 생략하기 때문에 문장 자체에서 연관 처리 을 의도하지 않았기 때문입니다.

따라서 "With"문은 바로 가기 포함 코드 이외의 것을 수행하지 않습니다. 그러나 고유 한 범위를 만듭니다. 이것은 컴파일러에서 꽤 가벼워 야하는 것처럼 보입니다. "Begin/End"와 같은 새로운 문장을보고 싶지만 이것은 지금부터 사용할 것입니다.

+1

많은 사람들이이 기능을 필요로하지 않을까 의심 스럽지만 해결책은 ... 우아한 ...) – igrimpe

+1

나는 이것을 여러 번 사용해 왔습니다. 위대한 작품 :) – prprcupofcoffee

2

VB.Net에는 고유 한 블록 범위 구문이 없으므로 가장 일반적인 방법은 질문에 제공 한 첫 번째 예제입니다.

0

음이 해키 해키,하지만 방법에 대해 : 당신의 if 문 같은의

Do 
    dim a 
    dim b 

    ... 

loop while (false) 

종류,하지만 당신은 거짓 상수를 사용하여 얻을.

+0

그건 다른 방식이지만, 내가 볼 때 항상 루프라고 생각할 것입니다. –

+0

@Carter - 나는 순수 주의자가 당신이 반복하고 있다고 주장 할 것입니다. – Hogan