我有一个部分 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/