所以我有一个包含对象列表的主类。
List<Media> media = new List<Media>();
媒体类是抽象类。有一个叫做Book的类,它是从媒体继承的。以下是将书籍添加到媒体列表的示例。
media.Add(new Book(mediaInfo[1], Convert.ToInt32(mediaInfo[2]), mediaInfo[3], summary));
mediaInfo是将值传递给构造函数的数组。
string[] mediaInfo = record.Split('|');
将摘要传递到媒体后,它将被加密。 book类包含一个Decrypt()方法,该方法将对其解密并且可以正常工作。问题是当我尝试调用它时,我收到一条错误消息,指出“解密不在媒体中”。所以我怎么称呼它。 我试过了,但出现错误。
foreach (Media m in media)
{
if (m.Search(query))
{
if (m.GetType() == typeof(Book))
{
Console.WriteLine(m.ToString() + m.Decrypt());
}
}
}
我检查它是否是一本书,为什么它不能下到书以查看是否存在解密。我不能将解密放入Media类,因为还有一个未插入的歌曲类。
答案 0 :(得分:4)
我会使用pattern matching
foreach (Media m in media)
{
if (m.Search(query))
{
if (m is Book b)
{
Console.WriteLine(b.ToString() + b.Decrypt());
}
}
}
答案 1 :(得分:2)
由于m
的类型为Media
(不包含Decrypt()
),因此您需要将m
强制转换为Book
:>
Console.WriteLine(m.ToString() + ((Book)m).Decrypt());