2009-06-12 15 views
13

Tengo una estructura simple que contiene dos campos; uno almacena un objeto y el otro almacena un DateTime. Hice esto porque quería almacenar objetos en un diccionario pero también con un sello DateTime.Estructura anulable vs clase

Tengo un método que devuelve mi estructura, y ahora he decidido que el método también podría devolver nulo, por lo que hice que mi estructura sea nulable. Ahora me pregunto si debería simplemente hacer de mi estructura una clase, ¿es un tipo de referencia?

Respuesta

10

En este caso, sí, probablemente sea más claro hacer de su estructura una clase.

En cuanto a la justificación, esencialmente estás creando un Tuple especializado. Es interesante observar que los diseñadores de la biblioteca han optado por hacer que el .Net 4 Tuple sea una clase en lugar de una estructura. (Esa página es el creador de tuplas y los enlaces a las diversas clases de instancias de tuplas)

+3

La "tupla como clase" es principalmente para mantener las cosas consistentes cuando llegas a Tuple <,,,,,,,> (8 args) - que casi con certeza se sobredimensionaría como estructura - especialmente si alguno de los T no es trivial. –

+0

@Marc: Ese es un buen punto. Hasta ahora no me había dado cuenta de que los Tuples son inmutables. –

6

Cualquiera de las dos debería estar bien, en realidad (siempre que el struct sea inmutable). Un DateTime y una referencia no deberían ser suficientes para sobredimensionarlo.

supongo que lo está utilizando como el valor (no la clave ) en el diccionario? Si se usa como la clave, debe sobrescribir Equals y GetHashCode(), independientemente de struct frente a class.

+0

Sí, lo estoy usando como valor, no clave, así que estoy anulando esos métodos. – Charlie

+1

(tal vez no lo expresé bien ... esos métodos solo son importantes [en este contexto] cuando se usa como clave) –

+0

Sí, lo entiendo, no es necesario para mí. Te refieres a si estás usando la clase como clave, como alguien explicó en una de las respuestas aquí http://stackoverflow.com/questions/689940/hashtable-with-multidimensional-key-in-c – Charlie