关于c#:无法检查基类/继承类的实体类型

Unable to check type of entity of base/inherited classes

我在使用getType()和typeof()获取类的类型时遇到了一个问题,问题是它不起作用。

我有内容的基本类,继承了播客和有声读物的类。

我首先使用代码,每个层次结构都有一个表(它将所有子类存储在一个带有鉴别器列的表中)来存储所有内容实体。

我希望按标题列查询内容表,并返回内容实体。然后,根据类型(播客、有声读物)做一些其他的事情。但是类型检查不起作用。

模型

1
2
3
4
5
6
7
8
9
public abstract class Content
{
    public string Title { get; set; }
}

public class Podcast : Content
{

}

知识库

1
2
3
4
5
6
7
public Content FindContentByRoutingTitle(string routingTitle)
{
    var content = Context.ContentItems
    .FirstOrDefault(x => x.RoutingTitle == routingTitle);

    return content;
}

控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var content = _contentRepository.FindContentByRoutingTitle(title);

if (content.GetType() == typeof(Podcast))
{
    return RedirectToAction("Index","Podcast", new { title = title });
}
else if (content.GetType() == typeof(Content))
{
    //just a check to see if equating with Content
    return RedirectToAction("Index","Podcast", new { title = title });
}
else
{
    //if/else block always falls to here.
    return RedirectToAction("NotFound","Home");
}

我这里有什么东西不见了吗?谢谢你的帮助。

引用:类型检查:typeof、gettype还是is?


GetType()返回对象的实际类,因此如果您试图将其与typeof(Content)进行比较,您将得到false。但是,如果要检查变量是否派生自基类,我建议使用2个选项。

  • 选项1:

    1
    2
    3
    4
    if (content is Content)
    {
         //do code here
    }
  • 选项2:

    1
    2
    3
    4
    if (content.GetType().IsSubclassOf(typeof(Content)))
    {
     //do code here
    }