无法检查 base/inherited 类 的实体类型
Unable to check type of entity of base/inherited classes
我在使用 GetType() 和 typeof() 获取 class 类型时遇到问题,问题是它不起作用。
我有基础 class 的内容并继承了 class 的 Podcast 和 AudioBook。
我正在使用 Code First,并且每个层次结构都有一个 Table(它将所有子 class 存储在一个 table 中,并带有鉴别器列)来存储所有内容实体。
我想通过 Title 列查询 Content table,并且 return Content 实体。然后,根据类型(Podcast、AudioBook)做一些其他的事情。但是类型检查不起作用。
型号
public abstract class Content
{
public string Title { get; set; }
}
public class Podcast : Content
{
}
存储库
public Content FindContentByRoutingTitle(string routingTitle)
{
var content = Context.ContentItems
.FirstOrDefault(x => x.RoutingTitle == routingTitle);
return content;
}
控制器
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");
}
这里有我遗漏的东西吗?感谢您的帮助。
参考:Type Checking: typeof, GetType, or is?
GetType()
returns 对象的实际 class 因此,如果您尝试将其与 typeof(Content)
进行比较,您将得到 false
。但是,如果你想检查变量是否来自基数 class,我推荐 2 个选项。
选项 1:
if (content is Content)
{
//do code here
}
选项 2:
if (content.GetType().IsSubclassOf(typeof(Content)))
{
//do code here
}
我在使用 GetType() 和 typeof() 获取 class 类型时遇到问题,问题是它不起作用。
我有基础 class 的内容并继承了 class 的 Podcast 和 AudioBook。
我正在使用 Code First,并且每个层次结构都有一个 Table(它将所有子 class 存储在一个 table 中,并带有鉴别器列)来存储所有内容实体。
我想通过 Title 列查询 Content table,并且 return Content 实体。然后,根据类型(Podcast、AudioBook)做一些其他的事情。但是类型检查不起作用。
型号
public abstract class Content
{
public string Title { get; set; }
}
public class Podcast : Content
{
}
存储库
public Content FindContentByRoutingTitle(string routingTitle)
{
var content = Context.ContentItems
.FirstOrDefault(x => x.RoutingTitle == routingTitle);
return content;
}
控制器
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");
}
这里有我遗漏的东西吗?感谢您的帮助。
参考:Type Checking: typeof, GetType, or is?
GetType()
returns 对象的实际 class 因此,如果您尝试将其与 typeof(Content)
进行比较,您将得到 false
。但是,如果你想检查变量是否来自基数 class,我推荐 2 个选项。
选项 1:
if (content is Content) { //do code here }
选项 2:
if (content.GetType().IsSubclassOf(typeof(Content))) { //do code here }