我一直在寻找一种重构和简化一个函数的方法,我必须根据输入类类型进行数据排序,并陷入困境switch(input.GetType()):
快速搜索让我找到了为什么 C# switch 语句不允许使用 typeof/GetType()? https://stackoverflow.com/questions/1711005/why-doesnt-c-switch-statement-allow-using-typeof-gettype并附有链接http://blogs.msdn.com/peterhal/archive/2005/07/05/435760.aspx http://blogs.msdn.com/peterhal/archive/2005/07/05/435760.aspx
我阅读了文档,但我没有理由认为情况令人困惑。
来自文章:
不幸的是,就像许多“简单”的事情一样
语言特性,类型切换不是
就像它第一次出现一样简单。这
当你看的更多时,麻烦就开始了
重要且同样重要,
像这样的例子:
class C {}
interface I {}
class D : C, I {}
switch typeof(e) {
case C: ... break;
case I: ... break;
default: ... break;
}
这其中有什么不简单的呢?电话typeof(e)
无法返回 - 这是I
D
and C
。它必须返回一个Type
不是接口和类类型的数组 -Type[]
。所以该类型的class D
is D
. And D
对应于一个default:
branch.
我错过了什么吗?
看来您不希望开关在子类上匹配。但这会打破里氏替换原则。 (如果您传入一个 C 对象,则代码可以工作,但不能用于 D,即使 D 是 C 的子类)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)