2008-09-19 10 views

Respuesta

4
if (any == System.DBNull.Value) ... 

Lo prefiero, simplemente porque lo he leído comparando valores, no tipos.

0

si está en C#, debe usar ==; is usa la reflexión que es más costosa de calcular, especialmente porque solo hay una instancia de System.DBNull.

+0

-1 para la declaración incorrecta 'is uses reflection'. No hay problema de rendimiento al usar 'is'. (Para ser más precisos, lo que generalmente se conoce como "usar la reflexión" es usar los métodos en System.Reflection, que de hecho son lentos. Por lo tanto, para referirse con la mano al uso de 'is' como" using reflection "es en el mejor de los casos, engañoso. Tan engañoso que este respondedor ASUME que el resultado debe ser lento. ¿Realmente ** evaluó ** esta suposición? No.) – ToolmakerSteve

-1

Me gusta el "es System.DBNull" más porque odio la idea de comparar algo con NULL y que sea cierto. Muchas otras sintaxis (¿qué demonios es el plural de eso?) Tendrían cualquier cosa == NULL devolver NULL.

Entiendo que hay DBNull.Value por un motivo. Lo sé. Estoy lista Mi preferencia :)

+0

¿Eh? Esta es una pregunta de .Net. 'x == null' NO devuelve' null'. Haciendo una búsqueda en Google, no he encontrado ningún otro idioma en el que lo haga. Quizás esté pensando en operaciones de flotación donde 'x == undefined' devuelve' undefined'. Pero eso es diferente de 'null'. 'null' tiene un significado específico, y de hecho se puede comparar con. Para obtener más detalles acerca de lo que significa una comparación, y si es una buena idea o no, consulte http://stackoverflow.com/questions/3507383/equalsitem-null-or-item-null (Y en C++, de donde de la sintaxis de C# s, a menudo es NECESARIO comparar con 'null'.) – ToolmakerSteve

+0

¡Hola @ToolmakerSteve! Muchacho, esta es una vieja pregunta que estás planteando.Está relacionado con los datos, y en SQL, la comparación (somevar = null) devuelve null. – nathaniel

11

que tienden a utilizar

if (DBNull.Value.Equals(value)) { 
    // 
} 

o

if (Convert.IsDBNull(value)) { 
    // 
} 
5

is no utiliza la reflexión como dice Kevlar623. Se asigna a la operación isinst en IL. En ese nivel, comparar el rendimiento es francamente tonto, a menos que estés trabajando en un sistema de orientación de misiles.

Yo uso value is DBNull. Suena bien y como desarrollador paranoico, no puedo confiar en que el único valor que existe es DBNull.Value. Los errores suceden

+0

Me preocupa más sobre otros errores que si una clase del sistema sellado con el único valor de 'Value 'de alguna manera va a brotar un segundo valor. Sin embargo, estoy de acuerdo con usted, no porque sea paranoico, sino porque la prueba contra DBNull.Value en mi opinión sugiere la posibilidad de que ** pudiera haber ** algún otro DBNull. Yo * sé * que no hay, pero ¿por qué escribir código que suena como si se refiriera a un DBNull específico, cuando de hecho solo hay uno? Siempre me pareció tonto. – ToolmakerSteve

-2

Este es un buen ejemplo de la función de seguimiento de formas. Cualquiera que se ejecute de manera más eficiente es el camino a seguir. Lo que parece, lee o los nombres incorrectos que llama es irrelevante. Use el lenguaje de manera eficiente, no modifique el idioma en uno nuevo.

+0

-1 - Esta no es una respuesta. Si hubiera incluido alguna evidencia en cuanto a ** qué ** formulario era más rápido, entonces sería una respuesta. – ToolmakerSteve

Cuestiones relacionadas