2012-03-06 15 views
4

私はVB6プロジェクトをC#に変換しています。私は完全に理解していないいくつかのVB6に出くわしました(そして、私は全くデバッグする能力を持っていません)。何かをする前に直ちに終了するループです。各ループについてすぐに終了します

For Each objSubFolder In objFolder.SubFolders 
    Exit For 
Next 

誰でも説明できますか?私はそれが何かをすると確信しています。私は変数を割り当てることを推測しています。もしそうなら、それは一度だけ行いますか?

+3

For Eachの前に「Dim objSubFolder As something」がありますか? For eachの後のどこかで 'objSubFolder'が使用されていますか?私はVB6の多くを覚えていませんが、SubFoldersの最初の要素をobjSubFolderに割り当てるのは巧妙な方法かもしれないと考えていました。 –

+0

これはおそらく使用されていないスタブでした。 – jac

+0

@Paoloループの前に宣言されたobjSubFolder(フォルダとしてのobjSubFolder)があり、ループの後に使用されます。私の推測はあなたと同じだった。その変数に対する言語特有の、独創的な割り当て。 – onefootswill

答えて

6

objSubFolderは(あなたにつきとしてコメント)各についての範囲外に存在する場合、コードは(このC#の同等

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

すなわち、与えられたフォルダの最初のサブフォルダを見つけるおよそだろう存在する場合)。

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のコードはOption Explicit Offを持っていたならば、あなたは多分に近づくためにdynamicobjFolder.SubFoldersを変換する必要があると思い空のフォルダコレクション
  • 上の値です上書きされます同じ挙動。
+1

Thanks Jared。私は最初のサブディレクトリオブジェクトを関数の前のフォルダとして宣言されているobjSubFolder変数に割り当てていると思います。 – onefootswill

+0

それは絶対に**そのC#コードと同等ではありません。 'objSubFolder'は依然として有効範囲内にあり、ループの後で利用可能であり、最初のサブフォルダ(存在する場合)に割り当てられます。これはおそらくコードのポイントです。私はC#の同等物は 'オブジェクトobjSubFolder; objforeach(objFolder.SubFoldersのobjSubFolder){ブレーク; } // objSubFolderはまだスコープ内にあり、最初のメンバ ' – MarkJ

+0

@ MarkJ良い点を指しています。アップデートします – JaredPar

関連する問題