It should read -

FCountryList: TStringList<TCountryAddressFormat>;


Do you really not prefix your Local, Global, Field and Parameters with nothing?

I'm a L, _, F and A person myself!


On Thu, Oct 15, 2009 at 8:29 AM, Jeremy North <jeremy.no...@gmail.com> wrote:
> The enumerator for TStringList returns a pointers not the specific
> object type so you still need a typecast.
>
> var
>   CountryAddressFormat: Pointer;
> begin
>   for CountryAddressFormat in Self do begin
>       Strings.AddObject(
> TCountryAddressFormat(CountryAddressFormat).CountryName,
> TObject(TCountryAddressFormat(CountryAddressFormat).CountryRefAsInteger)
> );
>   end;
>
> Didn't test it to see it is 100% correct.
>
> This raises the issues with FOR..IN in pre-generics versions. Unless
> you encapsulate your list in a class and implement the enumerator on
> the class you will most likely have to still typecast when using
> enumerators.
>
> With generics in D2009 and D2010 you wouldn't need to do this because
> you'd do something like (untested).
>
>
> var
>  FCountryList: TStringList<TCountryAddressFormats>;
>
>
> ....
>
> var
>   CountryAddressFormat  : TCountryAddressFormat;
> begin
>   for CountryAddressFormat in FCountryList do
>   begin
>       // no typecasting necessary
>   end;
> end;
>
> cheers,
> Jeremy
>
> On Thu, Oct 15, 2009 at 8:06 AM, Robert martin <r...@chreos.co.nz> wrote:
>> Hi
>>
>> After the D2010 presentation yesterday I decided I should actually use
>> some of the D2007 features I had not gotten around to using.
>> Specifically the For .. in construct.
>>
>> I am sure I am missing something but here iss what I want to do
>>
>>
>> I have the following 'old school code'  (note the base class here
>> inherits from TObjectList)
>>
>> procedure TCountryAddressFormats.LoadStringListWithCompanies(Strings:
>> TStrings);
>> var
>>    Counter     : Integer;
>> begin
>>
>>    for Counter := 0 to Self.Count - 1 do begin
>>        Strings.AddObject(
>> TCountryAddressFormat(Self.Items[Counter]).CountryName,
>> Tobject(TCountryAddressFormat(Self.Items[Counter]).CountryRefAsInteger) );
>>    end;
>> end;
>>
>> I wanted to replace it with
>>
>> procedure TCountryAddressFormats.LoadStringListWithCompanies(Strings:
>> TStrings);
>> var
>>    CountryAddressFormat  : TCountryAddressFormat;
>> begin
>>    for CountryAddressFormat in Self do begin
>>        Strings.AddObject( CountryAddressFormat.CountryName,
>> TObject(CountryAddressFormat.CountryRefAsInteger) );
>>    end;
>> end;
>>
>> but I get the following error
>>
>> [DCC Error] AddressFormat.pas(157): E2010 Incompatible types:
>> 'TCountryAddressFormat' and 'Pointer'
>>
>> what am I missing ?
>>
>>
>> Cheers
>> Rob
>>
>> _______________________________________________
>> NZ Borland Developers Group - Delphi mailing list
>> Post: delphi@delphi.org.nz
>> Admin: http://delphi.org.nz/mailman/listinfo/delphi
>> Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: 
>> unsubscribe
>>
>

_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi@delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: 
unsubscribe

Reply via email to