Pergunta

Eu encontro-me muitas vezes a necessidade de usar Integer.TryParse para testar se um valor é um inteiro. No entanto, quando você usar TryParse, você tem que passar uma variável de referência para a função, então eu encontro-me sempre a necessidade de criar um número inteiro em branco para passar Geralmente é algo como:.

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

Eu acho que isso seja muito complicado, considerando que tudo o que quero é uma verdadeira resposta simples / False. Existe uma melhor maneira de abordar isso? Por que não há uma função sobrecarregada onde eu posso simplesmente passar o valor Quero teste e obter uma resposta verdadeiro / falso?

Foi útil?

Solução

Não há necessidade de declarar o número inteiro.

If Integer.TryParse(intToCheck, 0) Then

ou

If Integer.TryParse(intToCheck, Nothing) Then

Se você tiver Net 3.5 habilidade você pode criar um método de extensão para strings.

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, em seguida, chamar como:

If value.IsInteger() Then

Desculpe, se deixar levar Eu sei, mas você também pode adicionar isso para a classe MyExtensions acima na Net 3.5 e não se preocupar, a menos que você precisa validações.

<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

Em seguida, basta usar

value.ToInteger()

Isso irá retornar 0 se ele não é um número inteiro válido.

Outras dicas

Uma vez que você estiver usando VB.net você pode usar a função 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;
    }

}

Tente este código.

Module IntegerHelpers

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

A parte boa é que uma vez que é declarado como uma função de nível de módulo pode ser usado sem um qualificador. Exemplo de Uso

return IsInteger(mInt)

Por que não escrever um método de extensão para limpar o seu código? Não tenho escrito VB.Net por um tempo, mas aqui está um exemplo em 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 Pouco realizada testes de tempo para verificações IsNumeric em 2003 . Você pode querer repetir os testes mencionados com v2 do CLR.

Uma variação seria:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top