【发布时间】:2012-11-19 15:31:54
【问题描述】:
我正在构建一个图书库应用程序,我有一个抽象图书类、两种类型的派生图书和两个将保存图书类型的枚举。 每本书都可以与一种或多种类型相关。
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; }
}
现在我想根据书籍类型保存折扣(没有双重折扣,只计算最高折扣),所以我正在考虑制作两个字典来保存每种类型的所有折扣,如下所示:
Dictionary<ReadingBooksGenre, int> _readingBooksDiscounts;
Dictionary<TextBooksGenre, int> _textBooksDiscounts;
所以现在我需要检查每本书的类型才能找到最高的折扣,有没有比这更好的方法:
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;
}
有没有办法在不检查类型的情况下选择正确的字典? 或者甚至是一种不用字典或使用字典的方法? 也许以某种方式将书籍类型与枚举联系起来?
很高兴听到任何改进建议。
(根据书籍名称、日期和作者,还有很多折扣。甚至更多的书籍类型,这就是为什么这种方式对我来说似乎不合适的原因)
谢谢。
【问题讨论】:
-
我有点怀疑教科书不是非小说的子集的模型。虽然我认为必须考虑到 J.K.罗琳的 Quidditch Through The Ages...
标签: c# dictionary enums modeling