Buduję aplikację biblioteki książek, mam książkę abstrakcyjną Klasa, dwa typy książek pochodnych i dwie wyliczenia, które zachowają gatunek książki. Każda książka może być powiązana z jednym gatunkiem lub więcej.wybieranie prawidłowej listy wyliczeń z 2 klas pochodnych
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; }
}
Teraz chcę zapisać zniżki na podstawie gatunków Book (bez podwójnych rabaty, najwyższa zniżka jest obliczana tylko), więc myślę o zrobieniu dwóch słowników, które będą zapisywać wszystkie rabaty dla każdego gatunku coś takiego:
Dictionary<ReadingBooksGenre, int> _readingBooksDiscounts;
Dictionary<TextBooksGenre, int> _textBooksDiscounts;
Więc teraz muszę sprawdzić gatunek każdej książki, aby wybrać najwyższą zniżkę, czy istnieje lepszy sposób to zrobić niż:
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;
}
jest th jesteś sposobem, aby wybrać odpowiedni słownik bez sprawdzania typu? , a może nawet sposób, aby to zrobić bez słowników lub używając jednego? może jakoś połączyć typ książki z Enum?
z przyjemnością usłyszy wszelkie sugestie dotyczące ulepszeń.
(istnieje wiele więcej zniżek w oparciu o nazwę, datę i książek autora. Nawet kilka rodzajów książek, dlatego ten sposób nie wydaje się słuszne, aby mnie)
Dziękuję.
Jestem trochę nieufny wobec modelu, w którym podręczniki nie stanowią podgrupy literatury faktu. Chociaż przypuszczam, że trzeba się zastanowić nad "IQuidditch Through The Ages" J. K. Rowlinga ... –