title: LINQ vs foreach vs for performance test results
body: <p>Could somebody explain these results?
  I know there are duplicate questions, but I have yet to find a single question that came to the same conclusion as my results :o</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Diagnostics;
  using System.Linq;
  using System.Text;
  using System.Threading.Tasks;
  
  namespace SpeedTest
  {
      class Person
      {    
          public Person(string name)
          {
              this.Name = name;
          }
  
          public string Name { get; set; }
      }
  
      class Program
      {
          static void Main(string[] args)
          {
              var people = new List&lt;Person&gt;();
              AddTwins("FRANCISCO", people);
              var stopwatch = new Stopwatch();
  
              string name = "OCSICNARF";
  
              long linqTime = 0L;
              long foreachTime = 0L;
              long forTime = 0L;
  
              stopwatch.Start();
              Person person0;
              var result = from person in people
                           where person.Name == name
                           select person;
              person0 = result.First();
              linqTime = stopwatch.ElapsedMilliseconds;
              stopwatch.Restart();
              Person person1;
              foreach (Person p in people)
              {
                  if (p.Name == name)
                  {
                      person1 = p;
                      break;
                  }
              }
              foreachTime = stopwatch.ElapsedMilliseconds;
              stopwatch.Restart();
              Person person2;
              for (int i = 0; i &lt; people.Count; i++)
              {
                  if (people[i].Name == name)
                  {
                      person2 = people[i];
                      break;
                  }
              }
              forTime = stopwatch.ElapsedMilliseconds;
              stopwatch.Stop();
  
              Console.WriteLine(string.Format("LINQ took {0}ms", linqTime));
              Console.WriteLine(string.Format("FOREACH took {0}ms", foreachTime));
              Console.WriteLine(string.Format("FOR took {0}ms", forTime));
          }
  
          static void AddTwins(string name, List&lt;Person&gt; people)
          {
              AddTwins(people, name, "");
          }
  
          private static void AddTwins(List&lt;Person&gt; people, string choices, string chosen)
          {
              if (choices.Length == 0)
              {
                  people.Add(new Person(chosen));
              }
              else
              {
                  for (int i = 0; i &lt; choices.Length; i++)
                  {
                      // choose
                      char c = choices[i];
                      string choose1 = choices.Substring(0, i);
                      string choose2 = choices.Substring(i + 1);
                      choices = choose1 + choose2;
  
                      // explore
                      AddTwins(people, choices, chosen + c);
  
                      // Unchoose
                      string unchoose1 = choices.Substring(0, i);
                      string unchoose2 = choices.Substring(i);
                      choices = unchoose1 + c + unchoose2;
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/BGTCq.png" alt="enter image description here"></p>