2009-06-12 8 views
13

Ich habe eine einfache Struktur, die zwei Felder enthält; Einer speichert ein Objekt und der andere speichert eine DateTime. Ich habe das getan, weil ich Objekte in einem Dictionary aber auch mit einem DateTime-Stempel speichern wollte.Nullable Struktur gegen Klasse

Ich habe eine Methode, die meine Struktur zurückgibt, und ich habe jetzt entschieden, dass die Methode auch Null zurückgeben kann, also habe ich meine Struktur nullfähig gemacht. Ich frage mich jetzt, ob ich meine Struktur nur zu einer Klasse machen sollte, damit es ein Referenztyp ist?

Antwort

10

In diesem Fall, ja, es ist wahrscheinlich klarer, um Ihre Struktur eine Klasse zu machen.

Soweit Begründung, erstellen Sie im Wesentlichen eine spezialisierte Tuple. Es ist interessant zu bemerken, dass die Bibliotheksdesigner entschieden haben, die .Net 4 Tuple eine Klasse und nicht eine Struktur zu machen. (Diese Seite ist der Tuple Creator und verlinkt auf die verschiedenen Tuple Instanz Klassen)

+3

Das "Tupel als Klasse" ist wahrscheinlich hauptsächlich, um Dinge konsistent zu halten, wenn Sie zu Tuple <,,,,,,,> (8 Args) kommen - die mit Sicherheit als Struktur überdimensioniert werden würde - vor allem, wenn einige der T nicht-trivial sind. –

+0

@Marc: Das ist ein guter Punkt. Ich hatte bis jetzt nicht bemerkt, dass die Tuples unveränderlich sind. –

6

Entweder sollte in Ordnung sein, in der Realität (solange die struct unveränderlich ist). A DateTime und eine Referenz sollte nicht genug sein, um es übergroß zu machen.

Ich nehme an, Sie es als Wert (nicht die Schlüssel) im Wörterbuch verwenden? Bei Verwendung als Schlüssel müssten Sie Equals und GetHashCode() außer Kraft setzen, unabhängig von struct vs class.

+0

Ja, ich benutze es als Wert, nicht als Schlüssel, also überschreibe ich diese Methoden. – Charlie

+1

(vielleicht habe ich es nicht gut formuliert ... diese Methoden sind nur wichtig [in diesem Zusammenhang] wenn sie als Schlüssel verwendet werden) –

+0

Ja, ich verstehe - nicht nötig für mich. Du meinst, wenn du die Klasse als Schlüssel verwendest, wie jemand in einer der Antworten hier erklärt hat http://stackoverflow.com/questions/689940/hashtable-with-multidimensional-key-in-c – Charlie