Groups | Blog | Home
all groups > dotnet framework > march 2008 >

dotnet framework : Updating a collection using a lambda


Paul Prewett
3/7/2008 8:20:03 AM
Hi -

I have a situation where I'd like to use a lambda, but I'm not sure how.
Basically, I have a collection of objects and I want to set a property on
each object that meets a condition.

Right now, I have this:

IEnumerable<VariableCode> codes =
variable.VariableCodeList.Where(c => c.Type == "MyCondition");
foreach (VariableCode code in codes)
{
code.IsShown = true;
}//foreach

I'm thinking that I can replace the foreach bit with a single lambda
expression. Can anyone help me with that syntax?

Thanks.


--
Paul Prewett
3/7/2008 9:19:02 AM
Hm, yes.

Well, VariableCodeList is actually a List<T>, but once I do the Where(), I
am stuck with IEnumerable<T>.

I'm thinking I'll just leave it the way that it is.

Thanks for the input, though.


--
-Paul Prewett


[quoted text, click to view]
Paul Prewett
3/7/2008 10:47:26 AM
Ah. There we go.

Thankee, sai.



--
-Paul Prewett


[quoted text, click to view]
Jon Skeet [C# MVP]
3/7/2008 4:33:01 PM
[quoted text, click to view]

Well, if you use List<T> instead, you can use List.ForEach.

Alternatively, you could (somewhat evilly) do:

var codes = from variable.VariableCodeList
where c.Type=="MyCondition"
select { c.IsShown=true; return c; } ;

(In other words, make the change part of the projection.)

Or you could write a ForEach extension method yourself - it would be
trivial to do.

--
Jon Skeet - <skeet@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
Jon Skeet [C# MVP]
3/7/2008 5:40:49 PM
[quoted text, click to view]

You can always call ToList() to get another List if you want.

--
Jon Skeet - <skeet@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
AddThis Social Bookmark Button