Domanda

Se si dispone di una classe di raccolta personalizzata che memorizza i pesi di una singola classe di frutta singolarmente in float / double, in questo modo:

1.1, 3.3, 6.6, 4.4, ...

e dovresti specificare se è float o double e per differenziare il tipo di frutta, è meglio farlo in questo modo:

Utilizzando un enum:

FruitList<float, FruitType.Orange>

o

Utilizzo di un enum nel costruttore:

FruitList<float> (FruitType.Orange)

o

Uso di una classe:

FruitList<float, Orange>

o

Uso di una classe nel costruttore:

FruitList<float> (Orange)

La cosa che mi confonde è se specificare questo tipo di cose ha senso in < > area (non sai come si chiama quell'area)?

Qual è la pratica migliore, più veloce, più efficiente?

Tra l'altro, la classe Orange non viene mai usata da nessuna parte, ma l'ha scritta solo se avesse senso specificare il tipo in quel modo?

EDIT: tra l'altro questo è solo un esempio, non quello reale, ma questo si riflette in modo chiaro. Come se fossero tutti float / doppi e vengono passati ad altri metodi. Ma i metodi devono sapere quale tipo di frutto deve funzionare correttamente. I frutti stessi non significano nulla.

È stato utile?

Soluzione

Prima di tutto, i valori enum non sono tipi, quindi l'esempio

FruitList<float, FruitType.Orange>

non funzionerà. Se vuoi assicurarti che il tuo elenco generico sia staticamente digitato su Orange dovrai usarlo

FruitList<float, Orange>

anche se non userai mai la classe <=>. A mio avviso, probabilmente non è necessario, dal momento che puoi comunicare il tipo nel nome della variabile:

FruitList<float> orangeWeights = new FruitList<float>(FruitType.Orange);

Altri suggerimenti

FruitList<float>(FruitType.Orange) è probabilmente la strada da percorrere.

float non può essere altro che un parametro di tipo. Il tipo di frutta è solo una proprietà. Non ha senso creare un tipo separato e utilizzare parametri di tipo per esso.

Dipende se quel tuo Orange sarà come un ... tag ... come Color. Una macchina può essere blu e rossa e comunque essere & Quot; la stessa & Quot; auto. Se vuoi che l'Arancione sia in grado di fare qualcosa di speciale, qualcosa di diverso da un semplice frutto o una mela, creo una classe Fruit astratta e una Sotto-classe Orange, e quindi uso & Lt; & Gt ; cosa. Se solo una cosa tag, come un colore, allora un enum può fare bene immagino.

Penso che sia più facile avere il controllo del tipo e simili usando comunque le classi / le strutture. Come, cosa accadrebbe se qualcuno provasse ad aggiungere un frutto di tipo mela a quella tua lista di frutti? diventerebbe un'arancia? dovrebbe verificare se il tipo di frutta del frutto fosse arancione? cosa accadrebbe se non lo fosse? ArgumentException?

Penso che andrei per le lezioni e < > thingy. Ma sono io. In realtà se fossi in me, penso che sarei andato avanti e avrei usato decimal per il peso e tutto il resto che doveva essere misurato ... e poi avevo qualcosa di simile (sintassi totalmente sbagliata ecc., Ma spero che tu abbia l'idea ):

class FruitList<TFruit> where TFruit : Fruit {}

abstract class Fruit {public abstract decimal Weight {get; protected set; }}

class Orange : Fruit { ... }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top