【发布时间】:2014-06-24 14:39:54
【问题描述】:
所以我试图确定两个不同的字符串是否与
相同 if DerobModel.ConstructionCount > 22 then
begin
for i := 22 to DerobModel.ConstructionCount-1 do
begin
ConstructionName[i] := DerobModel.Constructions[i].Name;
ShowMessage(ConstructionName[i]);
ShowMessage(DerobModel.HouseProperties.StringValue['NWall']);
if ConstructionName[i]=DerobModel.HouseProperties.StringValue['NWall'] then
begin
ShowMessage('Hej');
igSurf[0]:=idWallCon[i];
end;
LayerCount[i] := DerobModel.Constructions[i].LayerCount;
idWallCon[i] := i+1;
end;
end;
两个字符串的 ShowMessage 返回相同的字符串,但不知何故它不会进入 if 语句。有什么想法吗?
【问题讨论】:
-
好吧,那么显然
ConstructionName[i]和DerobModel.HouseProperties.StringValue['NWall']不是同一个字符串。由于您没有向我们展示它们中的任何一个是什么,因此很难诊断出它们的不同之处,但使用调试器肯定很容易弄清楚。 -
@KenWhite 如您所见,
ConstructionName[i]的名称来自DerobModel.Constructions[i].Name。这个名字也在一个组合框中,我得到DerobModel.HouseProperties.StringValue['NWall']和DerobModel.HouseProperties.StringValue['NWall']:=NWallComboBox.Items.GetText;你如何建议我使用调试器?我在那里放了一个断点,但它只是跨过它。显示的两条消息都显示相同的字符串,即“BetongVägg” -
除了我之前写的,我什么都看不到,因为你没有提供任何实际值。请再次阅读我写的内容(以及大卫在他的回答中写的内容,这与我所说的相同)。如果
=没有找到匹配项,则字符串不一样。 使用调试器并在运行时检查它们,看看有什么不同;我向你保证他们是实际上是不同的。 -
有效的调试大概是至少50%的观察。在注意到字符串的长度不同之前,不应该占用一个充满 cmets 和答案的页面,尤其是因为从调试器中获取这些信息非常容易。除此之外,在显示字符串值以进行调试时(即使在 IDE 的监视窗口中),养成使用 > 和
-
谢谢@KenWhite 我现在看到字符串的不同之处在于
DerobModel.HouseProperties.StringValue['NWall']字符串也包含“#$D#$A”。通过在线查看,似乎从 ComboBox 获取字符串的人遇到了这个问题。假设它总是这样,所以我可以对字符串使用 StringReplace 是否安全?
标签: delphi