1

VB.NETには非常に便利な "with" ステートメントがありますが、次のように名前のない変数で使用することもできます。

With New FancyClass()
    .Level = "SuperSpiffy"
    .Style = Slimming
    .Execute()
End With

「非表示」のインスタンスを取得して、そのプロパティをイミディエイト ウィンドウに表示する方法はありますか? ウォッチウィンドウに表示されるとは思えないので、即時で問題ありません。

.Execute()イミディエイト ウィンドウから同じ方法で (例: が例外をスローした場合) インスタンスにアクセスしようとすると、次のエラーが発生します。

? .Style
'With' contexts and statements are not valid in debug windows.

これを取得するために使用できるトリックはありますか、またはコードを別のスタイルに変換する必要がありますか? Withステートメントのように機能する場合Using(例: "With v = New FancyClass()")、これは問題になりません。

どのように機能しているかWith、どの代替案が存在するか、コンパイラが何をするかなどを知っています。これが可能かどうか知りたいだけです。

4

4 に答える 4

1

答えたように、簡単な答えは「いいえ」です。

しかし、それを行う別の方法ではありません。変数を宣言してからクリーンアップする代わりに、「使用」を使用することです。

Using fc as new FancyClass()
  With fc    
    .Level = "SuperSpiffy"    
    .Style = Slimming    
    .Execute()
  End With
End Using

次に、イミディエイトウィンドウでfcを使用でき、覚えておく必要はありません。

fc=nothing 

ライン。

それについてもう少し考えてください;)

于 2008-09-23T15:13:57.837 に答える
1

ある行で変数を定義し、次の行のwithステートメントでそれを使用することの何が問題になっていますか?私はそれが変数をより長く生き続けることを理解します、しかしそれはとてもぞっとしますか?

Dim x = new SomethingOrOther()
With x
    .DoSomething()
End With
x = Nothing ' for the memory conscious

2行余分にあなたを殺すことはありません=)

編集:あなたがただイエス/ノーを探しているなら、私は言わなければならないでしょう:いいえ。

于 2008-09-19T23:03:13.157 に答える
1

簡単な答えは「いいえ」であり、私もまだ方法を見つけていないので、本当にそれに到達する方法がないことを願っています. いずれにせよ、これまでのところ、「いいえ」であることの根拠はありません。ただ誰も持っていないということです =) これは、vb デバッガー チームが入れたと思われるものの 1 つにすぎません。

とにかく、私は usings と Idisposable についてすべて知っています。コード を修正する方法も知っています。

Using に関して言えば、私は自分のクラスに IDisposable を実装して、ちょっとしたコツをつかむのは好きではありません。

本当に必要なのは "With var = New FancyClass()" ですが、それは混乱を招くだけかもしれません!

于 2008-09-24T07:16:33.920 に答える
0

どちらの方法でも変数を作成しています-最初のケース(あなたの例)では、コンパイラは実際にアクセスできない暗黙の変数を作成しています.2番目のケース(Oliによる別の答え)では、あなたは'変数を明示的に作成する必要があります。

明示的に作成すると、イミディエイト ウィンドウで使用でき、使い終わったときに明示的に破棄できます (私は記憶を意識する人間の 1 人だと思います!)。魔法のプロセス。イミディエイト ウィンドウで暗黙の変数を取得する方法はないと思います。(そして、私は魔法のプロセスも信用していません。この理由から、複数のドット表記や暗黙の変数を使用することはありません)

于 2008-09-19T23:09:35.670 に答える