c# - 当转换为父类时查找 TypeOf Child 类

标签 c# asp.net-mvc entity-framework

我有一个部分 View ,我希望能够将其与多个不同的模型一起使用。当一个对象作为其父类传入时,有什么方法可以找出该对象的子类是什么?

例如:

型号:

public class Animal { }
public class Dog : Animal { }
public class Cat : Animal { }

Controller :

public class AnimalActionController : Controller
{
    public ActionResult MakeAnimalSound(Animal animal)
    {
       if (animal is Dog)
       {
         return PartialView("~/Views/_AnimalActionView.cshtml", new{sound="Woof"});
       }
       if (animal is Cat)
       {
         return PartialView("~/Views/_AnimalActionView.cshtml", new{sound="Meow"});
       }
    }
}

狗页面的父 View :

@model Test.Models.Dog
@Html.Action("MakeAnimalSound", "AnimalAction", new { Model })

现在,如果我要做类似这个例子的事情, Controller 中的 if 语句只会将动物视为动物,而不是最初的狗或猫。

有人知道该怎么做吗?我觉得应该很简单。

最佳答案

更好的选择是做这样的事情。测试类类型是一个糟糕的设计,并且在大多数情况下被认为是一种代码味道(有时这是必要的,但通常有其他方法可以在没有它的情况下完成您想要的事情):

public class Animal
{
     public virtual Sound {get;}
}
public class Dog : Animal
{
     public override Sound {get {return "Woof";}}
}
public class Cat : Animal
{
     public override Sound {get {return "Meow";}}
}

public ActionResult MakeAnimalSound(Animal animal)
{
   return PartialView("~/Views/_AnimalActionView.cshtml", new{sound=animal.Sound});
}

关于c# - 当转换为父类时查找 TypeOf Child 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17309437/

相关文章:

c# - 流式视频(C#使用FFmpeg AutoGen)发送多个数据请求

c# - 替换部分模拟对象中的只读属性

c# - Aspx 到 Razor 语法转换器?

c# - HTML 文本框将 int 数据字段的默认值显示为 0

asp.net-mvc - ASP.NET MVC 表单例份验证导致登录 url 被调用两次

c# - EntityFramework Core 2.0 跳过加载专栏

entity-framework - 使用 Include() 时如何避免在 EF 中生成大量 SQL 查询

entity-framework - VS2017 中的 SQLite 提供程序

C# ASP.NET 根据来自 db 的数据将 html 代码插入转发器

c# - AJAX.BeginForm - OnFailure 未收到 JSON 响应