Manejo de structs

12/07/2004 - 11:50 por Anonimo | Informe spam
Hola a todos.

Me he definido un struct, y quisiera saber cómo se puede
comparar un struct con null.

Me refiero a esta caso. Tengo un método que recibe un
struct y quiero comprobar si ha sido creado o
inicializado, cómo puedo comparar ?

He puesto

if (MISTRUCT is null) return null;

y no me compila.

Según tengo entendido, los structs son similares a las
clases, tienen constructor, puedes meter propiedades,
métodos, y quisiera saber si se puede saber si para un
struct es null o no, es decir, si se había hecho el new
para la estructura.

Al método que utiliza el struct le llegaría por valor la
estructura, no por referencia.


Saludos

Preguntas similare

Leer las respuestas

#1 José Miguel Torres
12/07/2004 - 13:06 | Informe spam
Hola,

Un struct es un tipo de dato complejo que puede tener constructores. La
utilziación de new no es obligatoria y el no utilizar new implica la no
inicialización de todos los campos, con lo cual en el caso que alguno no sea
un tipo de dato y sea una clase no se inicializará.

Para tu caso pues piensa que es como si pasaras un int (System.Int32) como
saber si está inicializado es por ejemplo comprovando el valor, esto es una
opinión mia

saludos

José Miguel Torres
jtorres_diaz~~ARROBA~~terra.es
http://jmtorres.blogspot.com

escribió en el mensaje
news:2b95901c467f5$a2553c80$
Hola a todos.

Me he definido un struct, y quisiera saber cómo se puede
comparar un struct con null.

Me refiero a esta caso. Tengo un método que recibe un
struct y quiero comprobar si ha sido creado o
inicializado, cómo puedo comparar ?

He puesto

if (MISTRUCT is null) return null;

y no me compila.

Según tengo entendido, los structs son similares a las
clases, tienen constructor, puedes meter propiedades,
métodos, y quisiera saber si se puede saber si para un
struct es null o no, es decir, si se había hecho el new
para la estructura.

Al método que utiliza el struct le llegaría por valor la
estructura, no por referencia.


Saludos
Respuesta Responder a este mensaje
#2 Pedro Luna Montalvo
12/07/2004 - 15:40 | Informe spam
1. El operador is en C#, se utiliza para verificar si un campo es de un tipo
de dato y no sirve para indagar sobre su valor. Por tanto "is null" es
invalido, pues el compilador desconoce de algun tipo de dato que se llame
"null".

2. Aca otro problema que veo que hay una confusion sobre la naturaleza de la
estructura y las clases.

Como bien mencionas, ambas tienes muchas caracteristicas similares, las
cuales a veces hace que no distingamos la una de la otra, pero tienen
diferencias y son bastante importantes.

La estructura es un tipo de datos por valor, y la clases es del tipo por
referencia.

Si ponemos una "lupa" sobre la estructura, lo que veremos en memoria es el
contenido de dicha estructura, es decir, los valores de sus campos.
Si usamos dicha "lupa" sobre una clase, veremos un puntero que me indica
donde se encuentran almacenados los valores de los campos.

Por tanto, una estructura no puede ser null, pues este valor lo que
significa es "el puntero en estos momentos no apunta a nada". Debido a que
la estructura contiene el valor propiamente, y no un puntero, no tiene
sentido consultar si una estructura es nula.

Saludos
Pedro Luna, MVP
Gye, Ecu


(que es un tipo por valor), como si fuera una clase
escribió en el mensaje
news:2b95901c467f5$a2553c80$
Hola a todos.

Me he definido un struct, y quisiera saber cómo se puede
comparar un struct con null.

Me refiero a esta caso. Tengo un método que recibe un
struct y quiero comprobar si ha sido creado o
inicializado, cómo puedo comparar ?

He puesto

if (MISTRUCT is null) return null;

y no me compila.

Según tengo entendido, los structs son similares a las
clases, tienen constructor, puedes meter propiedades,
métodos, y quisiera saber si se puede saber si para un
struct es null o no, es decir, si se había hecho el new
para la estructura.

Al método que utiliza el struct le llegaría por valor la
estructura, no por referencia.


Saludos
Respuesta Responder a este mensaje
#3 Octavio Hernandez
13/07/2004 - 00:31 | Informe spam
Hola,

Como dicen los demás colegas, es imposible comparar una estructura con null.
Lo que podrías comprobar es si los campos de la estructura aún mantienen sus
valores por defecto, o tienen ciertos valores que dan a entender que la
estructura no se ha inicializado correctamente, para lo que te podría valer
algo como esto:

struct Fecha
{
public int dia, mes, año;
public bool EsNula
{
get {
return dia == 0 && mes == 0 && año == 0;
}
}
}

Otro enfoque podría ser definir una constante estática del tipo estructura
que represente tu elemento 'neutro' (no inicializado), y luego comparar las
instancias de la clase con esa constante:

struct Fecha
{
public int dia, mes, año;
public Fecha(int d, int m, int a) { dia = d; mes = m; año = a; }
public static Fecha FechaNula = new Fecha(0, 0, 0);
}

Entonces podrías saber si alguna fecha "es nula" comparándola con la
constante estática:

Fecha f;
// ...
if ( f == Fecha.FechaNula)

Slds,

Octavio

escribió en el mensaje
news:2b95901c467f5$a2553c80$
Hola a todos.

Me he definido un struct, y quisiera saber cómo se puede
comparar un struct con null.

Me refiero a esta caso. Tengo un método que recibe un
struct y quiero comprobar si ha sido creado o
inicializado, cómo puedo comparar ?

He puesto

if (MISTRUCT is null) return null;

y no me compila.

Según tengo entendido, los structs son similares a las
clases, tienen constructor, puedes meter propiedades,
métodos, y quisiera saber si se puede saber si para un
struct es null o no, es decir, si se había hecho el new
para la estructura.

Al método que utiliza el struct le llegaría por valor la
estructura, no por referencia.


Saludos
Respuesta Responder a este mensaje
#4 Octavio Hernandez
13/07/2004 - 00:38 | Informe spam
Con el tipo genérico Nullable<T> de C# 2.0 (VS 2005) se podrán resolver de
forma muy elegante problemas de este tipo...

Slds - Octavio

escribió en el mensaje
news:2b95901c467f5$a2553c80$
Hola a todos.

Me he definido un struct, y quisiera saber cómo se puede
comparar un struct con null.

Me refiero a esta caso. Tengo un método que recibe un
struct y quiero comprobar si ha sido creado o
inicializado, cómo puedo comparar ?

He puesto

if (MISTRUCT is null) return null;

y no me compila.

Según tengo entendido, los structs son similares a las
clases, tienen constructor, puedes meter propiedades,
métodos, y quisiera saber si se puede saber si para un
struct es null o no, es decir, si se había hecho el new
para la estructura.

Al método que utiliza el struct le llegaría por valor la
estructura, no por referencia.


Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida