如果我们详细检查您的代码,我们会发现您正在比较两个对象的引用。由于一个对象的引用不能等于其他对象的引用,因此在此代码中似乎可以使用if-else if
组合,因此它可能如下所示:
private void Click(object sender, EventArgs e)
{
if (Object.ReferenceEquals(sender, c0)) { spotClick(0); }
else if (Object.ReferenceEquals(sender, c1)) { spotClick(1); }
else if (Object.ReferenceEquals(sender, c2)) { spotClick(2); }
else if (Object.ReferenceEquals(sender, c3)) { spotClick(3); }
}
ReferenceEquals
如果两个对象都为 null(请在此处查看),则该方法也返回 true,这可能会产生多重比较为 true(执行了多个 sporClick 调用),但在正常情况下,我们不能指望这sender
是null
因为Click
事件触发了,因此这是一个合法的代码和等价的到您发布的一个。如果 c0、c1、c2 和 c3 是常量表达式,则此类代码可以转换为 useswitch
语句,但正如我们所见,它们是引用从 Control
类派生的类型的对象的变量,因此不能在内部使用case
(检查在这里)。因此,您无法将此代码转换为switch/case