Integer.TryParse - uma maneira melhor?
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?
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)