33

値が整数かどうかをテストするために Integer.TryParse を使用する必要があることがよくあります。ただし、TryParse を使用する場合は、参照変数を関数に渡す必要があるため、渡すために常に空の整数を作成する必要があることに気付きます。通常は次のようになります。

Dim tempInt as Integer
If Integer.TryParse(myInt, tempInt) Then

私が欲しいのは単純な真/偽の応答だけであることを考えると、これは非常に面倒だと思います。これにアプローチするより良い方法はありますか?テストしたい値を渡すだけで真/偽の応答を取得できるオーバーロードされた関数がないのはなぜですか?

4

7 に答える 7

87

整数を宣言する必要はありません。

If Integer.TryParse(intToCheck, 0) Then

また

If Integer.TryParse(intToCheck, Nothing) Then

.Net 3.5 の機能があれば、文字列の拡張メソッドを作成できます。

Public Module MyExtensions

    <System.Runtime.CompilerServices.Extension()> _
    Public Function IsInteger(ByVal value As String) As Boolean
        If String.IsNullOrEmpty(value) Then
            Return False
        Else
            Return Integer.TryParse(value, Nothing)
        End If
    End Function

End Module

そして、次のように呼び出します。

If value.IsInteger() Then

申し訳ありませんが、私は知っていますが、.Net 3.5 で上記の MyExtensions クラスにこれを追加することもできます。検証が必要でない限り、心配する必要はありません。

<System.Runtime.CompilerServices.Extension()> _
Public Function ToInteger(ByVal value As String) As Integer
    If value.IsInteger() Then
        Return Integer.Parse(value)
    Else
        Return 0
    End If
End Function

次に、単に使用します

value.ToInteger()

有効な整数でない場合、これは 0 を返します。

于 2009-01-07T03:03:33.207 に答える
8

VB.net を使用しているため、IsNumeric 関数を使用できます。

If IsNumeric(myInt) Then
    'Do Suff here
End If
于 2009-01-07T02:59:47.660 に答える
5
public static class Util {

    public static Int32? ParseInt32(this string text) {
        Int32 result;
        if(!Int32.TryParse(text, out result))
            return null;
        return result;
    }

    public static bool IsParseInt32(this string text) {
        return text.ParseInt32() != null;
    }

}
于 2009-01-07T03:22:49.873 に答える
2

このコードを試してください。

Module IntegerHelpers

  Function IsInteger(ByVal p1 as String) as Boolean
    Dim unused as Integer = 0
    return Integer.TryParse(p1,unused)
  End Function
End Module

良い点は、モジュール レベルの関数として宣言されているため、修飾子なしで使用できることです。使用例

return IsInteger(mInt)
于 2009-01-07T02:58:40.627 に答える
1

コードをクリーンアップする拡張メソッドを作成してみませんか? 私はしばらく VB.Net を書いていませんが、c# の例を次に示します。

public static class MyIntExtensionClass
{
  public static bool IsInteger(this string value)
  {
    if(string.IsNullOrEmpty(value))
      return false;

    int dummy;
    return int.TryParse(value, dummy);
  }
}
于 2009-01-07T03:08:27.720 に答える
0

バリエーションは次のとおりです。

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
于 2014-03-10T14:36:42.917 に答える
0

J Ambrose Littleは、2003 年に IsNumeric チェックのタイミング テストを実行しました。上記のテストを CLR の v2 で再試行することをお勧めします。

于 2009-01-07T03:34:58.320 に答える