【发布时间】:2009-11-10 20:34:58
【问题描述】:
如本例所示:
switch ( myObj.GetType ( ) )
{
case typeof(MyObject):
Console.WriteLine ( "MyObject is here" );
break;
}
【问题讨论】:
-
@RHSeeger:Petter Hallam 的博文中没有任何声明可以解释为“人们太愚蠢了,无法理解这个概念”,也没有语言设计者谨慎行事,因为在世界。
-
这与人们“太愚蠢”没有任何关系。 Peter 的观点是人们会发现这种行为令人惊讶,而不是难以理解。 C# 已经过精心设计,尽可能不让人感到意外。
-
如果您曾经想编写一个
switch语句来切换对象的类型,那么您确实需要重构并将案例委托给对象实现。在一个设计良好的 OO 系统中,应该从不需要这样做。 -
请注意,打开对象类型是一种强烈的代码气味。打开一个类型来确定要执行什么代码/调用哪个方法就像说“我希望我在这里遇到的所有对象都有一个我现在可以调用的方法”。所以一个更好的问题可能是“为什么我必须打开对象类型?”当您回答该问题时,请解决问题而不是症状:)
标签: c# .net reflection switch-statement