utiliza tres signos signo significa reglas que para niños los interrogacion importancia exclamacion estos entonacion ejemplos como admiracion c# asp.net .net types

c# - tres - signos de interrogacion y exclamacion ejemplos



¿Cuál es el propósito de un signo de interrogación después de un tipo(por ejemplo: int? MyVariable)? (8)

Tipos anulables

Los tipos anulables son instancias de la estructura System.Nullable. Un tipo anulable puede representar el rango normal de valores para su tipo de valor subyacente, más un valor nulo adicional . Por ejemplo, a [ Nullable<Int32> ], pronunciado "Nullable of Int32", se le puede asignar cualquier valor desde -2147483648 a 2147483647, o se le puede asignar el valor nulo. A [ Nullable<bool> ] se le pueden asignar los valores verdadero o falso, o nulo. La capacidad de asignar tipos nulos a numéricos y booleanos es particularmente útil cuando se trata de bases de datos y otros tipos de datos que contienen elementos a los que no se les puede asignar un valor. Por ejemplo, un campo booleano en una base de datos puede almacenar los valores verdaderos o falsos, o puede estar indefinido.

Normalmente, el uso principal del signo de interrogación es para el condicional, x ? "yes" : "no" x ? "yes" : "no" .

¿Pero he visto otro uso para él pero no puedo encontrar una explicación de este uso del ? operador, por ejemplo.

public int? myProperty { get; set; }


En

x ? "yes" : "no"

el ? declara una sentencia if . Aquí: x representa la condición booleana; La parte anterior a la : es la oración de ese momento y la parte posterior es la oración else .

En, por ejemplo,

int?

el ? declara un tipo anulable y significa que el tipo anterior a este puede tener un valor nulo.


Es una abreviatura de Nullable<int> . Nullable<T> se utiliza con tipos de valor que no pueden ser nulos.


Para agregar a las respuestas anteriores, aquí hay un ejemplo de código

struct Test { int something; } struct NullableTest { int something; } class Example { public void Demo() { Test t = new Test(); t = null; NullableTest? t2 = new NullableTest(); t2 = null; } }

Esto daría un error de compilación:

Error 12 No se puede convertir nulo en ''Prueba'' porque es un tipo de valor no anulable

Observe que no hay ningún error de compilación para NullableTest. (note el? en la declaración de t2)


Significa que el tipo de valor en cuestión es un tipo anulable

Los tipos anulables son instancias de la estructura System.Nullable. Un tipo anulable puede representar el rango correcto de valores para su tipo de valor subyacente, más un valor nulo adicional. Por ejemplo, a un Nullable, pronunciado "Nullable of Int32", se le puede asignar cualquier valor desde -2147483648 a 2147483647, o se le puede asignar el valor nulo. A Nullable se le pueden asignar los valores true, false o null. La capacidad de asignar tipos nulos a numéricos y booleanos es especialmente útil cuando se trata de bases de datos y otros tipos de datos que contienen elementos a los que no se les puede asignar un valor. Por ejemplo, un campo booleano en una base de datos puede almacenar los valores verdaderos o falsos, o puede estar indefinido.

class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }


declara que el tipo es nullable.


uso práctico:

public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value) { if (value == null) { return "bad value"; } return someFunctionThatHandlesIntAndReturnsString(value); }


int? es una abreviatura de Nullable<int> , las dos formas son intercambiables.

Nullable<T> es un operador que puede utilizar con un tipo de valor T para que acepte el null .

En caso de que no lo sepa: los tipos de valor son tipos que aceptan valores como int , bool , char , etc.

No pueden aceptar referencias a valores: generarían un error en tiempo de compilación si les asigna un null , en lugar de tipos de referencia , que obviamente pueden aceptarlo.

¿Por qué necesitarías esto? Porque a veces sus variables de tipo de valor podrían recibir referencias nulas devueltas por algo que no funcionó muy bien, como una variable perdida o no definida devuelta desde una base de datos.

Le sugiero que lea la Documentación de Microsoft porque cubre el tema bastante bien.