Domanda

Mi trovo spesso a dover utilizzare Integer. TryParse per verificare se un valore è un numero intero. Tuttavia, quando usi TryParse, devi passare una variabile di riferimento alla funzione, quindi mi trovo sempre a dover creare un numero intero vuoto per passare. Di solito sembra qualcosa del genere:

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

Trovo che questo sia piuttosto ingombrante considerando che tutto ciò che voglio è una semplice risposta Vero / Falso. C'è un modo migliore per affrontare questo? Perché non esiste una funzione sovraccarica in cui posso semplicemente passare il valore che voglio testare e ottenere una risposta vera / falsa?

È stato utile?

Soluzione

Non è necessario dichiarare l'intero.

If Integer.TryParse(intToCheck, 0) Then

o

If Integer.TryParse(intToCheck, Nothing) Then

Se hai l'abilità .Net 3.5 puoi creare un metodo di estensione per le stringhe.

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

E poi chiama come:

If value.IsInteger() Then

Lo so, lasciati trasportare, lo so, ma puoi anche aggiungerlo alla classe MyExtensions sopra in .Net 3.5 e non preoccuparti se non hai bisogno di validazioni.

<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

Quindi usa semplicemente

value.ToInteger()

Questo restituirà 0 se non è un numero intero valido.

Altri suggerimenti

Dato che stai usando VB.net puoi usare la funzione IsNumeric

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;
    }

}

Prova questo codice.

Module IntegerHelpers

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

La parte interessante è che, poiché è dichiarata come funzione a livello di modulo, può essere utilizzata senza un qualificatore. Esempio di utilizzo

return IsInteger(mInt)

Perché non scrivere un metodo di estensione per ripulire il codice? Non scrivo VB.Net da un po ', ma ecco un esempio 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 Little eseguita test di temporizzazione per i controlli IsNumeric nel 2003 . Potresti voler ripetere i test citati con v2 del CLR.

Una variazione sarebbe:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top