Sto costruendo un'app librerie di libri, ho un libro di classe astratto, due tipi di libri derivati e due enum che salveranno il genere del libro. Ogni libro può essere correlato a un genere o più.selezionando l'elenco corretto di Enum da 2 classi derivate
abstract public class Book
{
public int Price { get; set; }
...
}
public enum ReadingBooksGenre
{
Fiction,
NonFiction
}
public enum TextBooksGenre
{
Math,
Science
}
abstract public class ReadingBook : Book
{
public List<ReadingBooksGenre> Genres { get; set; }
}
abstract public class TextBook : Book
{
public List<TextBooksGenre> Genres { get; set; }
}
Ora voglio salvare gli sconti in base ai generi Book (senza doppi sconti, solo il più alto sconto è calcolato), così sto pensando di fare due dizionari che salveranno tutti gli sconti per ogni genere , in questo modo:
Dictionary<ReadingBooksGenre, int> _readingBooksDiscounts;
Dictionary<TextBooksGenre, int> _textBooksDiscounts;
Così ora ho bisogno di controllare il genere di ogni libro, al fine di trovare il più alto sconto, c'è un modo migliore per farlo che:
private int GetDiscount(Book b)
{
int maxDiscount = 0;
if (b is ReadingBook)
{
foreach (var genre in (b as ReadingBook).Genres)
{
// checking if the genre is in discount, and if its bigger than other discounts.
if (_readingBooksDiscounts.ContainsKey(genre) && _readingBooksDiscounts[genere]>maxDiscount)
{
maxDiscount = _readingBooksDiscounts[genere];
}
}
}
else if (b is TextBook)
{
foreach (var genre in (b as TextBook).Genres)
{
if (_textBooksDiscounts.ContainsKey(genre) && _textBooksDiscounts[genere]>maxDiscount)
{
maxDiscount = _textBooksDiscounts[genere];
}
}
}
return maxDiscount;
}
è esimo C'è un modo per selezionare il dizionario corretto senza verificare il tipo? o forse anche un modo per farlo senza i dizionari, o usando uno? forse in qualche modo collega il tipo di libro all'Enum?
sarà lieto di ricevere suggerimenti di miglioramento.
(ci sono un sacco di più sconti in base al nome libri, la data e l'autore. Anche alcuni tipi di libri più è per questo che in questo modo non mi sembra giusto per me)
Grazie.
Sono un po 'sospettoso di un modello in cui i libri di testo non sono un sottoinsieme di non-fiction. Anche se suppongo che si debbano prendere indennità per _Quidditch Through The Ages di J. K. Rowling _... –