Sugi@ぱぱんぶぃびぃ Blog

VBとかVB.NETとかVB2005とか・・・

AILight Banner
AILight Blog

プロフィール

Sugi@ぱぱんぶぃびぃ Blog

目次

Blog 利用状況

記事分類

過去の記事

タグ

VB.NET: Try...Catch~When?

何気にTry...Catchに関する構文をMSDNライブラリで調べていたら、
Try...Catch...When なるものを発見。(知らなかった...)

Whenは例外のユーザーフィルタ機能をサポートしたもので、
VB.NET、C++マネージ拡張で使用可能となっています。(C#は未サポート)

例外をフィルタすると、フィルタ条件を満たす(Whenの評価式がtrue)場合のみ例外をキャッチします。

あまり良い例ではないですが、こんな事もできるということでひとつ。

Private Sub Button1_Click( _
    ByVal sender As System.Object, ByVal e As System.EventArgs _
) Handles Button1.Click
    Try
        Syori1()
    Catch ex As Exception
        MessageBox.Show("エラーが3回を超えました")
    End Try
End Sub

Private Sub Syori1()
    Dim errCounter As Integer
    Do
        Try
            Integer.Parse("A")   'わざと例外を発生させてます
            Exit Do
        Catch ex As Exception When errCounter 

投稿日時 : 2005年1月6日 6:23


コメントを追加

#  re: [VB.NET] Try...Catch~When? 2005年1月6日 7:29 菊池

C#で等価にするにはこんな感じですね

try { ... }
catch( ExceptionType ex ) {
if( when式 ) { CatchBlockCode; }
else throw; // whenが成立しなかったらハンドルせずに飛ばす
}

whenの条件をひっくり返してガード句にする方が見た目はすっきりするかな

#  re: [VB.NET] Try...Catch~When? 2005年1月6日 8:40 石野 光仁

へぇ 使えそう。

3回トライして バイバイとかありそうですよね。
でも、こんなに複雑なことできなくていいので、
try (int count = 0; count < 3; count++)

って書かせてくれれば、それで十分です。
記述が変って? 軽く流すところです(笑)

#  re: [VB.NET] Try...Catch~When? 2005年1月7日 12:54 菊池

流すわけにはいかんなぁw

for( int count=0;count<3;count++ ){
try {
…;
break; // うまくいけばbreakで抜ける
} catch( ExpectedException ex ) {}
}

でOK

#  re: [VB.NET] Try...Catch~When? 2005年1月7日 15:42 石野 光仁

うぅぅぅ つかまった (笑)

DBのトランザクションのリトライと絡めて
考えてみたのですが、あまりいい使い道が
浮かびませんでした < When

単に想像力不足ですかね?

#  re: [VB.NET] Try...Catch~When? 2005年1月7日 22:53 小野@どっとねっとふぁん

例外であるexが持っている状態をwhen中で確認し、その
catchステートメント自体を無効にすることができるという
ことらしいので、場合によっては便利かも。

#現在、C# & VB.NET 比較ガイドでお勉強中。

#  re: [VB.NET] Try...Catch~When? 2005年1月7日 22:59 杉下@ぱぱんぶぃびぃ

> #現在、C# & VB.NET 比較ガイドでお勉強中。
やべっ!勉強しとかなきゃ。
といいつつ、仕事に追われてみる・・・。(T_T)

#  re: [VB.NET] Try...Catch~When? 2005年1月12日 21:11 じゃんぬねっと

知ってたけど、使ったことがないです...w

#  re: VB.NET Catch の後に When 2006年3月2日 14:42 主婦と.NETと犬のぶろぐ

re: VB.NET Catch の後に When
タイトル
名前
URL
コメント