私はこれに数回遭遇しましたが、.NET 操作がより具体的なものではなく System.Exception をスローする必要があるというのは、非常に間違っているように思えます。この特定のインスタンスを InvalidCastException として再スローしてはならない理由はありますか? このケースを InvalidCastException ハンドラとひとくくりにする方が適切ではないでしょうか?
コンテキストについては、メソッドは次のとおりです。
<System.Runtime.CompilerServices.Extension()> _
Public Function Parse(Of T)(ByVal str As String) As T
Dim tc As TypeConverter = TypeDescriptor.GetConverter(GetType(T))
If tc IsNot Nothing Then
Dim prs As T = tc.ConvertFromString(str)
Return prs
Else
Throw New InvalidCastException("Cannot convert from " & GetType(T).Name & " to String.")
End If
End Function
Dim prs[...]Return prs
上記の System.Exception キャッチでラップすることを検討しています。
原因は、文字列が単に "" の場合の System.Exception " is not a valid value" 例外です。
どのような例外が「あるべき」ですか? それとも、System.Exception は本当にこの場合の良い例外なのでしょうか?
編集: さらに考えてみると、System.Exception は単にメソッドがそのように呼び出された結果なのでしょうか? Int32.Parse
メソッド (文字列)は、その関数によってスローされた例外であることを示しFormatException
ています。これは、このケースを考慮するのに最適な例外でしょうか?