2017-01-24 7 views
-1

文字列が配列に格納されていて、各文字列の5番目の文字が数字かどうかを確認する必要があります。私が使用したコードは次のとおりです。配列内の文字列を確認する

If Mid(arr(i), 5, 1) = IsNumeric(True) Then 
     MsgBox("Number") 
End If 

エラーを与えている:

An unhandled exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll

Additional information: Conversion from string "" to type 'Boolean' is not valid.

+0

'変換は『』と入力する『』ブールはストレートですvalid.'ではありません問題。数値として評価できるオブジェクトではなく、関数に '真偽値 'を渡しています(実際の問​​題です)。また、 'Option Strict On'をオンにすると、あなたの友人になります。 – Codexer

+0

@Zagglerは* one *の問題です。 –

+0

私は知っていますが、それは誤りです。それが解決されると、彼はもっと多くを持っています... – Codexer

答えて

0

あなたの構文が正しくありません。それは次のようになります。

If IsNumeric(Mid(arr(i), 5, 1)) Then 
1

これを行うには、より正確な方法は、次のようになります。

If Char.IsDigit(arr(i)(4)) Then 
+0

これは 'Microsoft.VisualBasic'名前空間でVB6のごみを使用していない慣用的な.netコードです。私は非常に興味深いです。さあ。 –

+1

'Charを使用しています。IsDigit() 'は、いくつかの文字が真を返すことを許し、それらは正しいASCII範囲にさえありません。私の意見では、「Integer.TryParse」はより良いアプローチであり、確実に0-9の間にあることを保証します... OPにそのエラーがある理由を説明すると、OPが問題を理解できるようになります。 – Codexer

+0

@Zaggler、あなたは 'Char.IsDigit'と' Char.IsNumber'を混同していると思います。ドキュメントによると、IsDigitは0〜9にしか一致しません。 – jmcilhinney

3

あなたはもともととして、あなたの質問にタグ付けされたが、VBAはSystem.InvalidCastException、またはそのための他の任意の例外をスローしません。問題。 です。

IsNumeric(True)Trueが数値の場合はTrueを返します。配列から検索された文字列が数値の場合は、を確認する必要があります。このために、

If IsNumeric(Mid(arr(i), 4, 1)) Then 
    MsgBox("Number") 
End If 

あなたのコードはいえVB6/VBAのように読み取ります:パラメータとして配列から取得した文字列をそれに与える

Imports Microsoft.VisualBasic 

名前空間は、VB6のようなものが含まれていることをそのあなたまったく使用する必要はありません。 .netの美しさはです。すべてがオブジェクトなので、配列がStringの配列であると仮定すると、VB6のMid関数の代わりに実際のStringインスタンスメソッドを呼び出すことができます。

Dim theFifthCharacter As String = arr(i).Substring(4, 1) 

それとも、あなたは1つの文字でのみ興味があり、String自体IEnumerable(Of Char)あるので、あなたはこれを行うことができます。

Dim theFifthCharacter As Char = arr(i)(4) 

お知らせオフ・バイ・1 - .NETでインデックスは0から始まりますので、あなたは第五項目をしたい場合、あなたはそれが数値だ場合、あなたは試すことができます参照したい場合は、今すぐインデックス4.

をフェッチします解析にそれ:

Dim digitValue As Integer 
If Int32.TryParse(theFifthCharacter, digitValue) Then 
    'numeric: digitValue contains the numeric value 
Else 
    'non-numeric: digitValue contains an Integer's default value (0) 
End If 

最後に、あなたがメッセージボックスをしたい場合は、WinFormsの使用の代わりにVB6のMsgBoxMessageBoxを:文字列から

Dim digitValue As Integer 
If Int32.TryParse(theFifthCharacter, digitValue) Then 
    'numeric: digitValue contains the numeric value 
    MessageBox.Show(string.Format("Number: {0}", digitValue)) 
Else 
    'non-numeric: digitValue contains an Integer's default value (0) 
    MessageBox.Show("Not a number") 
End If 
+1

大きな説明と詳細! – Codexer

関連する問題