Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ZecaLoteiro

[Resolvido] IF Como funciona?

Recommended Posts

Senhores, estou enfrentando problemas com um if...

Ao fazer um if com uma condição AND, imaginava que ao encontrar a primeira ocorrência negativa, o mesmo já iria para o ELSE, ignorando as outras condições, otimizando o código...

Qual a forma correta de escrever o código abaixo ? Sendo que da forma como está, ele tenta realizar a segunda verificação do IF e dá null reference exception.

If Not IsNothing(resultAtendimentos) And resultAtendimentos.Rows.Count > 0 Then
     For Each linha As DataRow In resultAtendimentos.Rows
       lista.Add(linha(0).ToString)
     Next
     GridViewDetalhes.DataSource = ConnectionFactory.executeQueryDataset("SELECT Cliente as CLIENTE, NodeName as SITE FROM BancoRICC INNER JOIN Cliente ON BancoRICC.idCliente = Cliente.idCliente WHERE BancoRICC.id IN (" + separaItensArray(lista) + ")", cn).Tables(0)
   Else
     GridViewDetalhes.DataSource = Nothing
   End If
   GridViewDetalhes.DataBind()

Se tivesse 15 condições AND, e a primeira desse negativa ele iria verificar todas as outras?

 

Desde já obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao usar o AND as duas condições devem ser verdadeiras para que ele entre.

Exatamente, por isso ao encontrar a primeira condição negativa, deveria ignorar o restante das condições...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você debugar sua aplicação deverá notar que resultAtendimentos não está null.

resultAtendimentos é que tipo de objeto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, ele para na segunda condição do IF.. não entra no for....

Ele não consegue verificar a quantidade de linhas pq o objeto é Nothing... porém, eu queria que ao verificar que IsNothing(resultAtendimento) = TRUE, ignorasse as demais condições, e fosse pro ELSE...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então o problema deve esta neste metodo IsNothing.

Tenta de outra forma. Eu não sei trabalar com VB, so com C#.

Em C# eu faria algo assim:

if( Equals(resultAtendimentos, null) && resultAtendimentos.Rows.Count > 0 ){
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que o problema não seja o método, pois se eu colocar

Um if dentro do outro, funciona....

Fica um código porco, mas funciona...

      If Not IsNothing(resultAtendimentos) Then
     If resultAtendimentos.Rows.Count > 0 Then
       For Each linha As DataRow In resultAtendimentos.Rows
         lista.Add(linha(0).ToString)
       Next
       GridViewDetalhes.DataSource = ConnectionFactory.executeQueryDataset("SELECT Cliente as CLIENTE, NodeName as SITE FROM BancoRICC INNER JOIN Cliente ON BancoRICC.idCliente = Cliente.idCliente WHERE BancoRICC.id IN (" + separaItensArray(lista) + ")", cn).Tables(0)
     Else
       GridViewDetalhes.DataSource = Nothing
     End If
   Else
     GridViewDetalhes.DataSource = Nothing
   End If
     GridViewDetalhes.DataBind()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim:


If (Not IsNothing(resultAtendimentos)) And (resultAtendimentos.Rows.Count > 0 ) Then 

Vlw pela força,

Mas não functionou...

IsNothing(resultAtendimentos) = TRUE

Mesmo a primeira condição sendo verdadeira ao invés de já ir pro ELSE, ele tenta fazer a segunda verificação.... e dá pau... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixa eu ver....

IsNothing(resultAtendimentos) = TRUE

 

se voce poro NOT ele vai negar e ficar como false e pular para a próxima condição

 

resultAtendimentos.Rows.Count > 0

 

não é isso?

deveria funcionar colocando o NOT somente para a primeira condição do IF

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixa eu ver....

IsNothing(resultAtendimentos) = TRUE

 

se voce poro NOT ele vai negar e ficar como false e pular para a próxima condição

 

resultAtendimentos.Rows.Count > 0

 

não é isso?

deveria funcionar colocando o NOT somente para a primeira condição do IF

Na condição

"IF NOT ISNOTHING(resultAtendimento)" significa que ele só tem chance de entrar no escopo do IF, se ele NÃO FOR NULO, por tanto, caso seja nulo, não tem nem pq verificar a seunda condição, poderia ignorá-la e ir para o ELSE, mas o VB não ignora... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, boa noite.

 

Você pode fazer isso utilizando o operador de Curto Circuito AndAlso, veja o seguinte link explicando melhor:

http://msdn.microsoft.com/en-us/library/cb8x3kfz.aspx

 

If Not IsNothing(resultAtendimentos) AndAlso resultAtendimentos.Rows.Count > 0 Then
  {....}
else
  {....}
end if

 

Espero que ajude, ;) até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.