2012-01-26 13 views
3

私はこのコードを持っている:私は次の例外を受け取っしかしSystem.ArgumentExceptionのキャッチブロックは存在しますが、例外はとにかくキャッチされません。なぜですか?

 if (typeof(Enum).IsAssignableFrom(typeof(T))) 
     { 
      try 
      { 
       return (T)Enum.Parse(typeof(T), text); 
      } 
      catch (ArgumentException e) 
      { 
       return default(T); 
      } 
     } 

を:型「System.ArgumentExceptionの」の

最初のチャンス例外ががmscorlib.dll で発生しました追加情報:要求された値「ABC 'が見つかりませんでした

これはどのように可能ですか? catchブロックが機能しないのはなぜですか?

答えて

9

なぜキャッチブロックが機能しないのですか?

catchブロックは完全に正常に動作しています。これは、Visual Studioデバッガでこれを確認していることだけです。それはfirst chance exceptionの意味です。デバッグすると、すべての例外がVSに表示されます。これは、適切なcatch句があると、最初の例外が表示されなくなることがあります。そして、あなたはconfigure VSを見せないようにすることができます。

ああ、ちょっとした注意:.NET 4.0にはEnum.TryParseメソッドがありますので、この特定のスニペットではtrycatchも必要ありません。

+0

このようなコード 'T result = default(T); Enum.TryParse(text、out result); '型Tはnullableでなければならないので動作しません – javapowered

1

最初のチャンス通知は、例外がスローされたことをデバッガに知らせることです。これは、キャッチフレームが考慮される前に発生します。つまり、あなたの例外は(おそらく)捕らえられます。