gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:59:39 27 4
gpt4 key购买 nike

我有一个局部 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 语句只会将动物视为 Animal,而不是最初的 Dog 或 Cat。

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

最佳答案

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

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 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17309437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com