Sto usando XNA Framework per realizzare un progetto di apprendimento. Ha una struttura Punto che espone un valore X e Y; ai fini dell'ottimizzazione, infrange le regole per il corretto design delle strutture, poiché è una struttura mutevole .
Come Marc Gravell , John Skeet e Eric Lippert indica nei rispettivi post circa GetHashCode()
(che Point sovrascrive), questa è una cosa piuttosto negativa, poiché se i valori di un oggetto cambiano mentre è contenuto in una hashmap (ad esempio, query LINQ), può diventare "perso".
Tuttavia, sto creando la mia struttura Point3D
, seguendo il disegno di Point
come linea guida. Quindi, anche questa è una struttura mutevole che sovrascrive GetHashCode()
. L'unica differenza è che la mia espone e int per i valori X, Y e Z, ma è fondamentalmente la stessa. Le firme sono di seguito:
public struct Point3D : IEquatable<Point3D>
{
public int X;
public int Y;
public int Z;
public static bool operator !=(Point3D a, Point3D b) { }
public static bool operator ==(Point3D a, Point3D b) { }
public Point3D Zero { get; }
public override int GetHashCode() { }
public override bool Equals(object obj) { }
public bool Equals(Point3D other) { }
public override string ToString() { }
}
Ho provato a rompere la mia struttura nel modo in cui descrivono, ovvero memorizzandola in List<Point3D>
, così come cambiando il valore tramite un metodo usando ref
, ma non ho riscontrato il loro comportamento che mettono in guardia (forse un puntatore potrebbe permettermi di romperlo?).
Sono troppo prudente nel mio approccio, o dovrei essere d'accordo a usarlo così com'è?