2

invalid cast exceptionVB.NET 2005 は、空の文字列を整数にキャストしようとしてスローせずに次のことを行う方法はありますか?

Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
4

3 に答える 3

9

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
于 2012-11-21T13:26:16.983 に答える
1

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)
于 2012-11-21T13:39:27.103 に答える
0

問題を一巡する方法は次のとおりです。

Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), strInput, 100)

このように、キャストは暗黙的に行われ、無効なキャスト例外が発生する可能性はありません。

于 2012-11-21T13:44:56.847 に答える