variable usar una sharp sesion saber programacion lenguaje historia existe ejemplos como caracteristicas c# class isset nothing

usar - ¿Cómo saber si una variable se ha inicializado en C#?



variable char c++ (7)

Aunque tiene una respuesta con la que está contento, hay algo detrás de esto que puede encontrar interesante o útil.

Hay una diferencia entre C # y VB.NET. En VB.NET puedes escribir:

Dim b as Boolean

Y en C # puedes escribir:

bool b;

Son sutilmente diferentes. En VB.NET, b recibió el valor falso (en otras palabras, ya se ha inicializado). En C #, b no tiene ningún valor (no está inicializado). C # hace un gran esfuerzo para asegurarse de que no pueda examinar el valor de una variable que nunca se ha inicializado.

Entonces no estás probando si la variable está inicializada. En VB.NET no existe una variable no inicializada. En C # es imposible obtener el valor de una variable sin inicializar para poder compararla con cualquier cosa.

Está comprobando si la variable se ha inicializado en null o en Nothing .

Sé que esta es una pregunta tonta y supongo que se debe haber preguntado antes. Sin embargo, no puedo encontrar una respuesta a mi pregunta.

Aquí hay un código de ejemplo (que por supuesto no se compila) para describir mi problema:

class test { int[] val1; string val2; static bool somefunction(test x, test y) { dosomestuff() test result; while(result is nothing) { if(somecondition){result=new test(something);} } } }

El problema que tengo está en la siguiente línea:

while(result is nothing)

Esta es la sintaxis de VB, que por supuesto no es lo que acepta el compilador de C #. ¿Alguien podría decirme cómo resolver el problema?


La sintaxis que busca es:

while (result == null)

También tienes que establecer el result = null; para empezar también


while (result ==null )

si a eso te refieres


while (result == null)


while (result == null)


while(result == null)

El equivalente de nada en C # es nulo.


  • TL; DR:

    if (Object.Equals( myVariable , default( MyVariableType )))

    • Reemplace myVariable y MyVariableType .


    Hay otras soluciones.

if (myVariable == null) no funcionará [1] con types value . Los tipos de valor son principalmente struct (por ejemplo, DateTime ), que incluyen [2] los tipos simples como int y las enum . Los tipos de valor no admiten un valor null (intrínsecamente).

La excepción y la solución para esto son tipos nullable : Esencialmente, estos agregan null a los posibles valores de un tipo de estructura. Son estructuralmente iguales a los Maybe<T> que puede conocer de otros idiomas [3] . ¿Los creas con ValueType? (por ejemplo, int? ), que es azúcar sintáctica para Nullable<ValueType> .


De forma alternativa, en lugar de utilizar un tipo anulable, puede comparar su variable con el valor predeterminado de su tipo:

if (Object.Equals(myVariable, default(MyVariableType)))

(Esto funcionará tanto para los tipos de referencia (objetos) como para los tipos de valor).
Tenga en cuenta que debe reemplazar MyVariableType manualmente; desafortunadamente no puede hacerlo

if (Object.Equals(myVariable, default(myVariable.GetType())))

porque default() solo acepta un nombre de tipo directamente. (Supongo que se evalúa en tiempo de compilación).


estructuras en pocas palabras

En pocas palabras, las estructuras son clases reducidas. Imagine clases que no admiten herencia o finalizadores, y tiene la versión reducida: la estructura. Las estructuras se definen de la misma manera que las clases (excepto con la palabra clave de struct ) y, aparte de las limitaciones que se acaban de describir, las estructuras pueden tener los mismos miembros ricos, incluidos campos, métodos, propiedades y operadores.
[Citado de: value ]

Las clases son tipos de referencia : una variable de clase (o más específicamente, su área de memoria) solo contiene un puntero a otra área de memoria, donde se almacenan los datos reales de la instancia del objeto.

Las variables de tipo de valor contienen directamente los datos. Esto puede generar un beneficio de velocidad debido a la localidad de caché y al guardar la búsqueda. Pero también puede ser perjudicial para el rendimiento en el caso de estructuras más complejas.


Notas al pie:

[1] Ni siquiera lanza un error. myVariable == null siempre arrojará false , porque su myVariable se inicializará con el valor default no null (cero ( equivalent ) o una estructura de ceros y null ). Este valor predeterminado está disponible con el default(Type) .

[2] Técnicamente, los tipos simples (todos los tipos integrados excepto la string y el object ) son estructuras. Nota al margen: los tipos incorporados son aliases para tipos del espacio de nombres del System .

[3] Por ejemplo, en Haskell . En C # Maybe<T> no está integrado, pero puede implementarse. No proporciona Nothing como una versión más explícita / autodocumentada de null tanto para clases como para estructuras.

[4] No hay [4] . No realmente, puedes ir y comprobar.