The typecast to TProperty is pointless, also, since it's a generic map... they can just write this, with no intermediate variable at all:
procedure TThing.Dump;
var
i: integer;
begin
for i := 0 to _properties.Count - 1 do
WriteLn(i + 1, ' ''', _properties.Data[i].Name, '''');
end;
It's not really great that you
can access the "items" default property (from the base class of non-generic TFPSList) through TFPGMap in the first place, I'll note as well.