title: Extending List<T> and Violating The Open/Closed Principle
body: <p>I just created the following method in one of my classes</p>
  
  <pre><code>public static bool Assimilate(this List&lt;Card&gt; first, List&lt;Card&gt; second)
  {
      // Trivial
      if (first.Count == 0 || second.Count == 0)
      {
          return false;
      }
  
      // Sort the lists, so I can do a binarySearch
      first.Sort();
      second.Sort();
  
      // Copia only the new elements
      int index;
      for (int i = 0; i &lt; second.Count; i++)
      {
          index = first.BinarySearch(second[i]);
          if (index &lt; 0)
          {
              first.Insert(~index, second[i]);
          }
      }
  
      // Edit
      second = null;
  
      return true;
  }
  </code></pre>
  
  <p>And a friend of mine, reviewing my code, said that I shouldn't create methods that 'extend the List class', since that violates the open/closed principle.
  If I want to extend the class List I should create a new class that inherits from List and implement my "merge" method in that new class.
  Is he right? Extending the List class violates the Open/Closed principle?</p>