Frage

Ich finde ich oft benötigen Integer.TryParse zu verwenden, um zu testen, ob ein Wert eine ganze Zahl ist. . Wenn Sie jedoch TryParse verwenden, müssen Sie eine Referenzvariable auf die Funktion übergeben, so finde ich mich immer ein leeres integer zu erstellen, um in der Regel passieren sieht es so etwas wie:

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

Das finde ich ziemlich umständlich sein bedenken, dass alles, was ich will, ist eine einfache Wahr / Falsch-Antwort. Gibt es einen besseren Weg, dies zu nähern? Warum gibt es nicht eine überladene Funktion, wo ich nur den Wert passieren kann ich testen will und eine Wahr / Falsch-Antwort zu erhalten?

War es hilfreich?

Lösung

keine Notwendigkeit, die ganze Zahl zu erklären.

If Integer.TryParse(intToCheck, 0) Then

oder

If Integer.TryParse(intToCheck, Nothing) Then

Wenn Sie .NET 3.5 Fähigkeit haben Sie eine Erweiterungsmethode für Strings erstellen können.

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

Und dann nennen wie:

If value.IsInteger() Then

Sorry, durch wegzukommen ich weiß, aber auch können Sie dies auf die oben MyExtensions Klasse hinzufügen in .NET 3.5 und sich keine Sorgen, wenn Sie Validierungen müssen.

<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

Dann verwenden Sie einfach

value.ToInteger()

Dies wird 0 zurückgeben, wenn es keine gültige Integer ist.

Andere Tipps

Da Sie VB.net verwenden Sie die IsNumeric Funktion verwenden können,

If IsNumeric(myInt) Then
    'Do Suff here
End If
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;
    }

}

Mit diesem Code Versuche.

Module IntegerHelpers

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

Das schöne daran ist, dass, da sie als Modul-Level-Funktion deklariert wird kann es ohne Qualifier verwendet werden. Beispiel Verwendung

return IsInteger(mInt)

Warum eine Erweiterungsmethode nicht schreiben Code aufzuräumen? Ich habe nicht VB.Net für eine Weile geschrieben, aber hier ist ein Beispiel in 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);
  }
}

J Ambrose Kleine ausgeführt Timing-Tests für IsNumeric prüft im Jahr 2003 . Vielleicht möchten Sie die genannten Tests mit v2 des CLR erneut zu versuchen.

Eine Variante wäre:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top