所以我试图确定两个不同的字符串是否与
相同 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语句。有什么想法吗?
答案 0 :(得分:2)
已知字符串的=
运算符可以正常工作。当字符串s1
和s2
相等时,s1 = s2
的计算结果为true。否则它会评估为false。已知=
运算符可以在所有版本的Delphi中正常工作。
得出的结论是,如果你的if
的主体没有执行,那么这两个字符串就不相等了。既然你知道这两个字符串不相等,你可以调试程序来解决为什么你认为相同的两件事实际上是不相等的。
请注意,使用=
进行的等式测试是准确的。信件案件很重要。空白很重要。等等。
答案 1 :(得分:2)
你的字符串不同,很简单。
如果你想弄清楚究竟有什么不同,你可以写一个 else 块部分来详细比较字符串,并准确地显示出不同的内容。
if ConstructionName[i]=DerobModel.HouseProperties.StringValue['NWall'] then
begin
ShowMessage('Hej');
igSurf[0]:=idWallCon[i];
end
else
begin
if (Length(ConstructionName[i]) <>
Length(DerobModel.HouseProperties.StringValue['NWall'])) then
begin
ShowMessage('Length('+IntToStr(Length(ConstructionName[i]))+') <> Length('+
IntToStr(Length(DerobModel.HouseProperties.StringValue['NWall']))+')');
end
else
begin
for LCharPos := 1 to Length(ConstructionName[i]) do
begin
if (ConstructionName[i][LCharPos] <>
DerobModel.HouseProperties.StringValue['NWall'][LCharPos]) then
begin
//Here you might need to rather show the ordinal values of the
//characters to see the difference if they **look** the same due
//to the font of the message.
ShowMessage('Pos['+IntToStr(LCharPos)+'] "'+
ConstructionName[i][LCharPos]+'" <> "'+
DerobModel.HouseProperties.StringValue['NWall'][LCharPos]+'"');
end;
end;
end;
end;
我唯一可以想到的可能会出乎意料地导致“相同”字符串被报告为不同的是:如果它们是不同的字符串类型。例如。如果一个是WideString而另一个是AnsiString,那么: