Hi,
aus einer ObjectList möchte ich ein bestimmtes Object anhand einer Property finde. Dafür diese Routine:
Delphi-Quellcode:
function TMSNList.IndexOfMSN(value: string): Integer;
var
i: Integer;
begin
Result:=-1;
for i:=0 to self.Count-1 do
begin
DoWriteLog('Value: '+QuotedStr(value)+' Self['+IntToStr(i)+'].MSN: '+QuotedStr(self[i].MSN));
if self[i].MSN=value then
begin
DoWriteLog('--Match');
Result:=i;
Break;
end else DoWriteLog('--NoMatch');
end;
end;
(die DoWriteLog's sind nur für die Fehlersuche drin).
Als Log bekomme ich das:
Code:
21.11.2017 19:07:05,540 : MSNlog: Value: '25' Self[0].MSN: '60'
21.11.2017 19:07:05,540 : MSNlog: --NoMatch
21.11.2017 19:07:05,540 : MSNlog: Value: '25' Self[1].MSN: '25'
21.11.2017 19:07:05,540 : MSNlog: --NoMatch
Wie man sehr schön sehen kann, ist beim Index 1 der String gleich, wird aber nicht als gleich in der Routine erkannt.
Beide sind vom Typ String.
Vergleicht man strings neuerdings anders?
Interessant ist, dass es auf meiner Win10-Maschine läuft, aber auf einem Win2012- und einem Win2008-Server (auf denen ich das jetzt getestet habe) nicht.