5

変数の名前は、サブのスコープの外に出ないため、あまり気にしない場合があります。実際、名前を指定すると、余分なコード行が追加されます。また、この名前に対処する必要があるため、潜在的なリファクタリング作業が増える可能性があります (後で名前を変更することにした場合)。以下のコードを見てください。

Dim fileInfo As New FileInfo("filename.txt")
With New FileSystemWatcher
  .Path = fileInfo.DirectoryName
  .Filter = fileInfo.Name
  .EnableRaisingEvents = True
  AddHandler .Changed, AddressOf OnChanged
End With

これは完全に有効な VB.NET コンストラクトであり、すっきりと見えます。ただし、デバッグに関しては、With句内にブレークポイントを配置すると仮定すると、ブレークポイント.Pathが適切に設定されていることを確認するためにそれを取得するオプションはありません。

ここで何か不足していますか、それとも Visual Studio はステートメント.Property内の構文のデバッグを実際に提供していませんか? With2010年を使用しています。

明らかに、上記のコードでデバッグすることはあまりありませんが、このような名前のない Withアプローチが役立つ場合の例は数多くあります。

ところで、名前付きWith句にも同じ問題があります。つまり、次のように書くとします。

Dim fsw As New FileSystemWatcher
With fsw
  .Path = fileInfo.DirectoryName
  .Filter = fileInfo.Name
  .EnableRaisingEvents = True
  AddHandler .Changed, AddressOf OnChanged
End With

の値を取得することはまだできず、.Path常に接頭辞を付けなければなりませんfsw

With句を互いに入れ子にするにつれて、問題は大きくなります。

4

2 に答える 2

3

名前のない変数を含むWithステートメントは、デバッガーにとって手ごわい課題であり、回避策はありません。「fsw」のような小さな名前付きヘルパー変数には何の問題もありません。とにかく、コンパイラーによって自動生成されて存在します。これは無名ではなく、言葉では言い表せません。同様VB$t_ref$L0)に、デバッガーはVB.NET識別子名で無効な文字を使用するため、入力できません。これは意図的なものであり、使用した名前と衝突しないようにします。これにより、[自動]ウィンドウに表示されなくなります。

変数に名前を付けることで、適切な回避策をすでに見つけています。そこからのデバッグは簡単です。フィールド名ではなく、変数名の上にマウスを置くだけです。そしてもちろん、他のすべてのデバッガーウィンドウでもうまく機能します。特にAutosウィンドウは活気づきます。また、ステートメントを完全に記述することを優先して、Withステートメントを削除することを躊躇しないでください。IntelliSenseは、これを面倒な作業から解放するのに大いに役立ちます。

于 2013-03-07T12:10:44.317 に答える
0

オプションとして、代わりにこれらの変数をウォッチリストに追加し、ウォッチウィンドウから値を表示します。

于 2013-03-07T09:51:35.617 に答える