Ir para conteúdo
Fórum Script Brasil
  • 0

Isnumeric Do Vb6


Denis Bittencourt Muniz

Pergunta

Fala galera!

Existe, em alguma classe da .NET Framework, métodos que validam tipos? Pois sinto falta de funções que usava no VB6 como, por exemplo, 'IsNumeric', 'IsArray', etc...

Alguma solução? rolleyes.gif

Falows!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Creio que você esteja utilizando C#, porque no VB.NET ainda temos o IsNumeric. Então, você pode fazer uma referência ao "Microsoft Visual Basic .NET Runtime" e colocar o seguinte:

using Microsoft.VisualBasic;
E a seguir fazer:
string s = "23";
MessageBox.Show(Information.IsNumeric(s).ToString());

Certo? wink.gif Na classe Information existem outras funções que você pode achar úteis (como o IsArray citado).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Fala Graymalkin, beleza?

Eu já sabia do 'namespace' 'VisualBasic'. Sabia a existência das funções típicas do Visual Basic.net.. Mas eu queria saber se .NET Framework tem algum método que se parece com o 'IsNumeric' do VB.

Mas o problema já está resolvido, pois descobri o método 'IsNaN' da classe 'double'... Mas ai surgiu outra dúvida:

Quando digito "double." aparece o método 'IsNaN', bom, até ai tudo certo.. Mas quando digito: "double x; //Declaro variável" e depois digito "x." não aparece o método 'IsNaN'.. porque? Seria porque 'IsNaN' é um método de classe?? Mas se for método de classe, porque a Microsoft fez isso?? Não vejo motivo para o método 'IsNaN' não estar disponível para os objetos (váriaveis) do tipo 'double'.

Aproveitando o post gostaria fazer mais duas perguntas que, de certa forma, estão relacionadas com o assunto em questão:

int, double, char, System.Math, System.Console.. Eles são classes ou objetos? porque não consigo criar instâncias de 'System.Math' e 'System.Console'? porque posso usar 'Console.Read()'? Método de classe??? Ou 'Console' é objeto?

Eu posso criar instânicias de classes (resumindo, objetos), certo? Posso criar instâncias de objetos, ou seja, não instanciar a classe, e sim um determinado objeto ?

Sei que só faço petgunta, mas a dúvida ta alta....

Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

Fala Graymalkin, beleza?

Eu já sabia do 'namespace' 'VisualBasic'. Sabia a existência das funções típicas do Visual Basic.net.. Mas eu queria saber se .NET Framework tem algum método que se parece com o 'IsNumeric' do VB.

Mas o problema já está resolvido, pois descobri o método 'IsNaN' da classe 'double'...

IsNaN() serve para o seu caso? Você tem que passar um double para este método, não? Eu pensei que a idéia seria passar uma string, como é o caso mais comum de utilização do IsNumeric(). De qualquer forma, eu acho que a melhor maneira para o seu caso seria fazer:

  	string s = "3,141516";

  	try
  	{
    double d = Double.Parse(s);
    MessageBox.Show(d.ToString());
  	}
  	catch (System.FormatException erro)  
  	{
    MessageBox.Show("Este não é um valor válido para um duplo!");
  	}
Ou ainda:
  	string s = "3,141516";
  	if (!Double.TryParse(s, System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out valor))
  	{
    MessageBox.Show("Valor inválido para um duplo!");
  	}
  	else 
  	{	
    MessageBox.Show(valor.ToString());
  	}
Mas ai surgiu outra dúvida: Quando digito "double." aparece o método 'IsNaN', bom, até ai tudo certo.. Mas quando digito:  "double x;  //Declaro variável" e depois digito "x."  não aparece o método 'IsNaN'.. porque? Seria porque 'IsNaN' é um método de classe?? Mas se for método de classe, porque a Microsoft fez isso?? Não vejo motivo para o método 'IsNaN' não estar disponível para os objetos (váriaveis) do tipo 'double'.
Sim, IsNaN() é um método de classe. A idéia de utilização dele seria assim:
  	double d = 0.0/0.0;
  	
  	if (Double.IsNaN(d))
  	{
    MessageBox.Show(d.ToString());
  	}

Aproveitando o post gostaria fazer mais duas perguntas que, de certa forma, estão relacionadas com o assunto em questão:

int, double, char, System.Math, System.Console.. Eles são classes ou objetos? porque não consigo criar instâncias de 'System.Math' e 'System.Console'? porque posso usar 'Console.Read()'? Método de classe??? Ou 'Console' é objeto?

Todos os citados são classes. Porém, alguns têm seu(s) método(s) construtor(es) protegido(s) para que não se permita a criação de instâncias. Este é o caso de System.Math e System.Console.

Eu posso criar instânicias de classes (resumindo, objetos), certo?

Sim, desde que estas classes não tenham seu(s) método(s) construtor(es) protegido(s) ou que não sejam abstratas.

Posso criar instâncias de objetos, ou seja, não instanciar a classe, e sim um determinado objeto ?

Se a linguagem em questão fosse Python eu diria que sim (nela, classes também são objetos). Mas, no caso, não. Em .NET você cria mesmo uma instância da classe, que é um objeto.

Sei que só faço petgunta, mas a dúvida ta alta....

smile.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

OK! valeu Graymalkin! Você sempre exterminando minhas dúvidas. : )

Apesar do 'IsNaN' ter resolvido o problema, não existe, entre as "milhões" de classes da .NET Framework, algum método de alguma classe que faça a mesma função do 'IsNumeric'? Lembrando que quero alguma coisa diferente ao 'Microsoft.VisualBasic.Information.IsNumeric'.

Só mais uma, pensando melhor, quando adiciono a referência do VB.net (Adiciono a DLL no menu 'project', certo?) o programa pode ficar mais "pesado", certo? Seria pouca coisa? Qunato mais ou menos?

E outra, porque o C# não tem algumas funções (igual ao VB.net) típicas? Bem que a Microsoft deveria fazer isso, não concorda?

Falows! smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

OK! valeu Graymalkin! Você sempre exterminando minhas dúvidas. : )

biggrin.gif

Apesar do 'IsNaN' ter resolvido o problema, não existe, entre as "milhões" de classes da .NET Framework, algum método de alguma classe que faça a mesma função do 'IsNumeric'? Lembrando que quero alguma coisa diferente ao 'Microsoft.VisualBasic.Information.IsNumeric'.

Só me ocorre agora os métodos IsDigit e IsNumber da classe Char. Só que você teria que utilizá-lo com cada caracter da string. Dá pra criar uma função IsNumeric com estes métodos:

  public bool IsNumeric(string s) 
  {
  	bool retorno = true;
  	foreach (char c in s)
  	{
    retorno &= Char.IsNumber(c) || c=='.' || c==',';
  	}
  	return retorno;
  }
Daí, seria só fazer:
  	MessageBox.Show(IsNumeric("a3").ToString());
  	MessageBox.Show(IsNumeric("3a").ToString());
  	MessageBox.Show(IsNumeric("23").ToString());
  	MessageBox.Show(IsNumeric("23,34").ToString());

Só mais uma, pensando melhor, quando adiciono a referência do VB.net (Adiciono a DLL no menu 'project', certo?) o programa pode ficar mais "pesado", certo? Seria pouca coisa? Qunato mais ou menos?

Não sei precisar ao certo, mas creio que não deva acarretar em problemas de performance.

E outra, porque o C# não tem algumas funções (igual ao VB.net) típicas? Bem que a Microsoft deveria fazer isso, não concorda?

Sim, é bem chatinho ter que ficar reinventado a roda, como é o caso do IsNumeric. Talvez o C# 2.0 (Visual Studio 2005) já tenha alguma coisa nesse sentido.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...