【发布时间】:2018-02-14 19:08:33
【问题描述】:
我正在尝试创建一个函数,该函数可以接收实际上是 Child1、Child2 或 Child3 类型的 Parent 类的参数。我想根据它是哪种孩子类型做一些不同的事情,除了我在下面显示的内容之外,我想不出其他方法。这对我来说是错误的,所以任何关于更好方法的建议都将不胜感激。
public static bool DoStuff(Parent parent)
{
try
{
Child1 child = parent as Child1;
DoStuffChild1(child);
}
catch (Exception)
{
try
{
Child2 child = parent as Child2;
DoStuffChild2(child);
}
catch(Exception)
{
try
{
Child3 child = parent as Child3;
DoStuffChild3(child);
}
catch (Exception)
{
HandleError();
}
}
}
}
【问题讨论】:
-
可以选择 C# 7 吗?模式匹配功能肯定是比这更好的解决方案。
-
即使排除这些,为什么还需要异常处理?如果演员表失败,那么孩子应该是
null。 -
你完全正确,这是错误的。我不仅会在代码审查中拒绝这一点,我还会带你回去向你开枪;)查找
typeof和.GetType()- 如果你愿意,我会写一个涵盖这些选项的答案。 -
是的,就像@EvanTrimboli 所说的那样,这不会像您期望的那样工作,因为转换失败只会导致分配 null 而不是异常。
-
我知道这会起作用,因为 Visual Studio 需要一个 try-catch 围绕此处的“as”强制转换,以防它无法将其强制转换为子类。然而,这太恶心了,我永远无法提交任何形式的审查。 @EvilGeniusJamie 我几乎想把自己带回来,让我想到这一点。感谢所有的答案。
标签: c# inheritance