Pregunta

¿Alguien aquí el uso de VB.NET y tienen una fuerte preferencia por o en contra del uso IsNothing como contraposición a Is Nothing (por ejemplo, If IsNothing(anObject) o If anObject Is Nothing...)?Si es así, ¿por qué?

EDITAR:Si usted piensa que ambos son igualmente aceptables, ¿crees que es mejor escoger uno y quedo con ella, o bien para que se mezclen?

¿Fue útil?

Solución

Si usted echa un vistazo a el código MSIL a medida que se ejecuta vas a ver que no se compila hasta el exacto mismo código.Cuando se utiliza IsNothing() hace una llamada a ese método no sólo la evaluación de la expresión.

La razón por la que se tienden a inclinarse hacia el uso de "no Es Nada" es cuando estoy negando que se convierte en "IsNot Nada" en lugar de "No IsNothing(objeto)", que personalmente creo que se ve más legible.

Otros consejos

Me parece que Patrick Steele respondieron a esta pregunta mejor en su blog: Evitar IsNothing()

Yo no cualquier copia de su respuesta aquí, para asegurar que Patrick Steele obtener crédito para su puesto.Pero creo que si estás tratando de decidir si usar o no Es Nada o IsNothing usted debe leer su post.Creo que estarás de acuerdo que no Es Nada es la mejor opción.

Editar - VoteCoffe a comentar aquí

Parcial del contenido del artículo:Después de revisar más de código que he encontrado otra razón, usted debe evitar este:Acepta los tipos de valor!Obviamente, desde IsNothing() es una función que acepta un 'objeto', puede pasar cualquier cosa que usted quiera.Si se trata de un tipo de valor, .RED cuadro a un objeto y se pasa a IsNothing -- que siempre devolverá false en una caja de valor!El VB.NET compilador marque la casilla "no Es Nada" sintaxis de estilo y no de compilación si se intenta hacer un "no Es Nada" en un tipo de valor.Pero el IsNothing() función compila sin quejas.-PSteele – VoteCoffee

Usted debe evitar absolutamente el uso de IsNothing()

Aquí están 4 razones desde el artículo IsNothing() VS no Es Nada

  1. Lo que es más importante, IsNothing(object) tiene todo lo que ha pasado como un objeto, incluso los tipos de valor!Dado que los tipos de valor que no puede ser Nothing, es un completo desperdicio de verificación.
    Tomemos el siguiente ejemplo:

    Dim i As Integer
    If IsNothing(i) Then
       ' Do something 
    End If
    

    Esto compilará y se ejecutará correctamente, mientras que este:

    Dim i As Integer
    If i Is Nothing Then
        '   Do something 
    End If
    

    No compila, sino que el compilador va a aumentar el error:

    'Es' operador no acepta operandos de tipo 'Integer'.
    Los operandos deben ser de referencia o tipos que aceptan valores null.

  2. IsNothing(object) es en realidad parte de la parte de la Microsoft.VisualBasic.dll.
    Esto no es deseable ya que tienen una innecesaria dependencia de la VisualBasic biblioteca.

  3. Su lento - 33.76% más lento en el hecho (más de 1000000000 iteraciones)!

  4. Tal vez la preferencia personal, pero IsNothing() se lee como una Yoda Condición.Cuando usted mira a una variable que está comprobando su estado, con él como objeto de su investigación.

    es decir,¿ es hacer x?--- NO Es xing de una propiedad de es?

    Así que creo que If a IsNot Nothing se lee mejor que If Not IsNothing(a)

Estoy de acuerdo con "no Es Nada".Como se indicó anteriormente, es fácil negar con "IsNot Nada".

Esto me parece más fácil de leer...

If printDialog IsNot Nothing Then
    'blah
End If

que esta...

If Not obj Is Nothing Then
    'blah
End If

VB está lleno de cosas como que tratando de hacer tanto "como el inglés" y cómodo para las personas que son utilizados en los lenguajes que usan () y {} mucho.Por ejemplo, en el "inglés"de lado...VB tiene la "No"palabra clave...y no, no estoy bromeando.Y en el otro lado, como probablemente ya sabe, la mayoría de las veces, se puede utilizar () con la función de llamadas si desea, pero no es necesario.

Yo prefiero IsNothing (...) pero yo uso C y C#, así que sólo lo que es cómodo.Y creo que es más legible.Pero vaya, con lo que se siente más cómodo para usted.

Me estoy inclinando hacia la "Nada" alternativa, principalmente porque parece más OO.

Seguramente Visual Basic no consiguió la no palabra clave.

Yo también tienden a usar el no Es Nada de la versión parcial de usarlo tanto como yo en SQL.

He utilizado inicialmente IsNothing pero me he estado moviendo hacia el uso de la Nada en nuevos proyectos, principalmente para mejorar la legibilidad.La única vez que me quedo con la IsNothing se si me estoy manteniendo, donde el código que se utiliza en todo el hotel y me quiero quedar consistente.

No es Nada requiere de un objeto que se ha asignado el valor de Nada.IsNothing() puede tomar cualquier variable que no ha sido inicializado, incluidos los de tipo numérico.Esto es útil por ejemplo cuando se prueba si un parámetro opcional que ha pasado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top