Integer.TryParse - ein besserer Weg?
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?
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)