2012-03-06 3 views
4

VB6 프로젝트를 C#으로 변환 중입니다. 나는 완전히 이해하지 못하는 몇몇 VB6을 보았고 (그리고 나는 전혀 디버깅 할 능력이 없다). 무엇이든하기 전에 즉시 종료되는 루프입니다.각 루프에 대해 즉시 종료

For Each objSubFolder In objFolder.SubFolders 
    Exit For 
Next 

아무도 설명 할 수 있습니까? 나는 그것이 뭔가를한다고 확신합니다. 변수를 할당하는 것 같아요. 그렇다면 한 번만 할 수 있습니까?

+3

For Each 앞에 'Dim objSubFolder As something'이 있습니까? 거기에 각각의 후 어딘가에 사용되는'objSubFolder' 있나요? VB6은 많이 기억하지 않지만 SubFolders의 첫 번째 요소를 objSubFolder에 할당하는 것이 현명한 방법이라고 생각했습니다. –

+0

이것은 아마도 사용되지 않은 스텁 일 것입니다. – jac

+0

@Paolo 루프 앞에 선언 된 objSubFolder (폴더로 objSubFolder)가 있으며 루프 이후에 사용됩니다. 제 추측은 당신 것 같았습니다. 해당 변수에 대한 언어 별의 고유 한 지정. – onefootswill

답변

6

, 코드 (

var folders = Directory.GetDirectories(@"c:\someFolder"); 
var firstFolder=folders.FirstOrDefault(); 

즉, 특정 폴더의 첫 번째 하위 폴더를 찾아이 C#을 대략 동등한 것 존재하는 경우).

3

Exit For - 기본적으로 C#의 break 키워드입니다. 이 루프는 실용적으로 아무것도하지 않는 것처럼 보입니다.

+2

그것은 그 것처럼 보이지 않지만 * 않습니다 *. –

4

이 코드는 대부분 완전한 연산입니다. 이 코드가 갖는 유일한 잠재적 영향은 objFolder.SubFolders 속성 또는 메서드를 실행한다는 것입니다. 이 회원에게 가치있는 부작용이 있으면이 코드가 중요 할 수 있습니다.

이것이 반드시 여전히 1-1 변환되지 않습니다 C# 코드

object objSubFolder = null; 
using (var e = objFolder.SubFolders.GetEnumerator()) { 
    if (e.MoveNext()) { 
    objSubFolder = e.Current(); 
    } 
} 

주의 거친 상당이다.

  • objSubFolder 이전 방법에서 정의 된 경우이 잘못 VB 코드는 다음 아마도 가까이 얻을 dynamicobjFolder.SubFolders을 변환 Option Explicit Off해야 할 것 한 경우는 빈 폴더 수집
  • 에 대한 값의 덮어 쓰기 같은 행동. objSubFolder가 (당신이 코멘트에 따라) 각각에 대한의 범위 밖에있는 경우
+1

감사합니다. 나는 그것이 함수에서 이전에 폴더로 선언 된 objSubFolder 변수에 첫 번째 하위 디렉토리 객체를 할당한다고 생각합니다. – onefootswill

+0

그것은 C# 코드와 완전히 동일하지 않습니다 **. 'objSubFolder'는 여전히 범위 내에 있고 루프 이후에 사용할 수 있으며 첫 번째 하위 폴더 (있는 경우)에 할당됩니다. 아마 코드의 요점 일 겁니다. 나는 C#과 같은 것이'object objSubFolder; objforeach (objFolder.SubFolders의 objSubFolder) {중단; } // objSubFolder는 여전히 여기에 있으며 첫 번째 멤버 인 ' – MarkJ

+0

@ MarkJ good point'를 가리키고 있습니다. 업데이트됩니다 – JaredPar

관련 문제