我们将沙箱升级到 Winter '13,但我们的生产环境仍在旧版本上。以下代码在我们的沙箱上打印“false”,但在生产环境中打印“true”。我似乎在网上找不到提到这一点,但看起来它们的工作方式不同!
Set<Id> x = new Set<Id>{
'012A0000000qv2wIAA'
,'012A0000000qv2xIAA'
,'012A0000000qv2yIAA'
,'012A0000000qv2zIAA'
};
System.debug(x.contains('012A0000000qv2z'));
请注意,Set 包含 18 个字符的 ID,我们询问它是否 .contains() 一个 15 个字符的 ID。我不介意它以一种或另一种方式工作。只是奇怪的是它的行为不同。
编辑:刚刚注意到,如果我将字符串显式转换为 ID,则行为在不同环境中变得一致:
System.debug(x.contains((Id)('012A0000000qv2z')));
那么也许 Apex 改变了新版本中的类型提升规则?