Thread overview
foreach gotchas
Dec 18, 2003
J Anderson
Dec 18, 2003
Patrick Down
Dec 18, 2003
J Anderson
December 18, 2003
With the for each val is always a copy, which means code like below is incorrect.

int [] array;

foreach (int i, int val; array)
{
   val = 10;
}

I think in foreach val should be a reference. 

What's worse, is if you iterate through an array of structs with foreach.  In these cases there probably is a  performance hit due to the copy.

-Anderson

December 18, 2003
You can do it with inout

J Anderson <REMOVEanderson@badmama.com.au> wrote in news:brsd95$9iu$1@digitaldaemon.com:

> With the for each val is always a copy, which means code like below is incorrect.
> 
> int [] array;
> 
> foreach (int i, int val; array)
> {
>     val = 10;
> }

foreach (inout int i, int val; array)
{
     val = 10;
}



> 
> I think in foreach val should be a reference.
> 
> What's worse, is if you iterate through an array of structs with foreach.  In these cases there probably is a  performance hit due to the copy.
> 
> -Anderson
> 
> 

December 18, 2003
Patrick Down wrote:

>You can do it with inout
>  
>

Thanks.

>J Anderson <REMOVEanderson@badmama.com.au> wrote in
>news:brsd95$9iu$1@digitaldaemon.com: 
>
>  
>
>>With the for each val is always a copy, which means code like below is
>>incorrect.
>>
>>int [] array;
>>
>>foreach (int i, int val; array)
>>{
>>    val = 10;
>>}
>>    
>>
>
>foreach (inout int i, int val; array)
>{
>     val = 10;
>}
>
>
>
>  
>
>>I think in foreach val should be a reference. 
>>
>>What's worse, is if you iterate through an array of structs with foreach.  In these cases there probably is a  performance hit due to
>>the copy.
>>
>>-Anderson
>>
>>
>>    
>>
>
>  
>