Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 682409
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T01:35:33+00:00 2026-05-14T01:35:33+00:00

I just came across the most unexpected behavior. I’m sure there is a good

  • 0

I just came across the most unexpected behavior. I’m sure there is a good reason it works this way. Can someone help explain this?

Consider this code:

var nums = new int[] { 1, 2, 3, 4 };
var actions = new List<Func<int>>();

foreach (var num in nums)
{
    actions.Add(() => num);
}

foreach (var num in nums)
{
    var x = num;
    actions.Add(() => x);
}

foreach (var action in actions)
{
    Debug.Write(action() + " ");
}

The output is a bit surprising for me:

4 4 4 4 1 2 3 4 

Obviously there’s something going on with how the lambda is referencing the enumerator. In the first version of the foreach, is ‘num’ actually bound to ‘Current’, instead of the result returned by it?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-14T01:35:34+00:00Added an answer on May 14, 2026 at 1:35 am

    This is well-known and established behavior regarding lambdas, though frequently surprising to those who’ve encountered it for the first time. The fundamental issue is that your mental model of what a lambda is isn’t quite correct.

    A lambda is a function that doesn’t get run until it’s invoked. Your closure binds a reference to that lambda instance, not the value. When you execute your actions in your final foreach loop, that’s the first time you’re actually following the closed reference to see what it is.

    In the first case, you’re referencing num, and at that point, the value of num is 4, so of course all your output is 4. In the second case, each lambda has been bound to a different value that was local to the loop each time, and that value isn’t changed (it hasn’t been GC’d solely because of the lambda reference.) therefore, you get the answer that you expect.

    The closure over a local temporary value is actually the standard approach to capture a specific value from a point in time within the lambda.

    Adam’s link to Eric Lippert’s blog provides a more in-depth (and technically accurate) description of what’s going on.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Just came across this by Chris Coyier - http://css-tricks.com/examples/CSSTabs/ Can anyone explain me, how
Just came across an issue with my Wordpress template that I can't figure out.
1) I came across THIS ARTICLE today, which states: The most popular method in
I just came across this seemingly innocuous comment , benchmarking ArrayList vs a raw
I just came across some peculiar behavior with getResourceAsInputStream that I was hoping someone
I just came across this code that lets me plot multiple ordinates (I know
I just came across an unknown concept of c# for me. Can anyone tell
Just came across the register keyword in C++ and I wondered as this seems
I just came across jLinq , a JS library to query data (e.g. arrays)
I just came across an interesting LogCat entry: 06-28 08:43:25.616 I Web Console 5075

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.