などのIDを避けます。しかし、それが原因であるかどうかを調べる前に、正しい方法を教えてください。String
は数字ではありません。Option Strict
〜On
とタイプセーフなコードを使用する方法を学んでください。コンパイラがあなたが達成しようとしていることを推測させないでください。
あなたはInt32.TryParse
を使用することができます。
Dim number As Int32
If Not Int32.TryParse(TextBox5.Text, number) Then
MessageBox.Show("Please enter a valid integer")
Return
End If
Select Case number ' now integer is the target type
Case 0 To 150000
TextBox6.Text = "-"
Case 150001 To 300001
TextBox6.Text = "+1-"
Case 300002 To 450002
TextBox6.Text = "+2-"
Case 450003 To 600003
TextBox6.Text = "+3-"
Case 600004 To 750004
TextBox6.Text = "+4-"
Case 750005 To 900005
TextBox6.Text = "+5-"
Case 900006 To 1050006
TextBox6.Text = "+6-"
Case Else
TextBox6.Text = "+Extra-"
End Select
これは仕事とOption Strict On
でもコンパイルされます。
なぜコードが機能しないのですか?最後の範囲をCase 900006 To 999999
に変更すると、期待どおりに動作します。これは、文字列の比較方法を行う必要があります。これをコンパイル(Strict Off)しても、900006 To 1050006
は"900006" To "1050006"
のように文字列として扱われるため、左から右へ文字の文字が比較されます。"9"
は"1"
より大きいです。この条件は決して真ではありません最後のCase
ではなく、Case Else
に入ることはありません。
Documentation:expressionlistで
式は任意のデータ型にすることができ、は が、彼らはそれは二つのタイプに有効ですtestexpressionの種類と 適切な比較演算子に暗黙的に変換されて現在は となっています。 Option Strict Off
expressionlist
(範囲)で
は(理由TextBox5.Text
の)String
あるtestexpression
の型に変換されます。 String
がInteger
ではないので Option Strict On
を使用すると、正しくコンパイルエラーを取得:へ
オプション厳密には に「整数」から暗黙の型変換を禁止する「文字列」
Ok ... Dim range as Integer range = TextBox5.Text – Jamyz
2つの等しく正解を受け取ったにもかかわらず、文字列を整数にキャストしようとしていますか? – Mike
オプションを有効にしてください – Plutonix