invalid cast exception
VB.NET 2005 は、空の文字列を整数にキャストしようとしてスローせずに次のことを行う方法はありますか?
Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
invalid cast exception
VB.NET 2005 は、空の文字列を整数にキャストしようとしてスローせずに次のことを行う方法はありますか?
Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
VB.NETには現在、実際の三項演算子があります(2008年以降)
Dim intResult = If(IsNumeric(strInput), CInt(strInput), 100)
これは、短絡評価を使用するため、IIF とは異なります。
テスト式が true と評価された場合、FalsePart は単に無視されるか、またはその逆です。
Marek Kembrowsky 氏がコメントで述べているように、IIF は関数であり、そのパラメーターは渡される前にすべて評価されますが、IF (三項演算子として) は VB コンパイラの追加機能です。
ただし、VB.NET でプログラミングするときに、Microsoft.VisualBasic 互換性名前空間によって提供されるショートカットを使用するのは好きではありません。Framework は、メソッドの TryParse セットのような優れたソリューションを提供します。入力文字列が Integer.MaxValue を超えると、例は失敗します。
より良いアプローチは
Dim d As decimal
if Not Decimal.TryParse(strInput, d) then d = 100
または、浮動小数点を持っている場合string
(? OK OK、あなたは私の言いたいことを理解しています)
Dim d As Double
if Not Double.TryParse(strInput, d) then d = 100
Ifソリューションは機能しますが、 IsNumeric() は正しいチェックではありません。strInput が数値であるが、integer.maxvalue を超えている場合はどうなりますか? 代わりに TryParse を使用することをお勧めします。
Dim i As Integer
If Not Integer.TryParse("1234567890", i) Then i = 100
また
Dim j As Integer = If(Integer.TryParse("123456789", Nothing), Integer.Parse("123456789"), 100)
問題を一巡する方法は次のとおりです。
Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), strInput, 100)
このように、キャストは暗黙的に行われ、無効なキャスト例外が発生する可能性はありません。