title: Moq tests using ExpectSet() with It.Is<T>() aren't behaving as... expected
body: <p>I've isolated the behaviour into the following test case. I'd be grateful to anyone who can tell me how to expect/verify a property set for a <code>List&lt;T&gt;</code> property - it appears there's something going on inside <code>It.Is&lt;T&gt;(predicate)</code> that isn't making a whole lot of sense to me right now. Sample code will run as a console app from VS2008 - you'll need to add a reference to Moq 2.6 (I'm on 2.6.1014.1) - please try uncommenting the different ExpectSet statements to see what's happening...</p>
  
  <pre><code>using System;
  using Moq;
  using System.Collections.Generic;
  
  namespace MoqDemo {
  
      public interface IView {
          List&lt;string&gt; Names { get; set; }
      }
  
      public class Controller {
          private IView view;
  
          public Controller(IView view) {
              this.view = view;
          }
  
          public void PopulateView() {
              List&lt;string&gt; names = new List&lt;string&gt;() { "Hugh", "Pugh", "Barney McGrew" };
              view.Names = names;
          }
  
          public class MyApp {
              public static void Main() {
                  Mock&lt;IView&gt; mockView = new Mock&lt;IView&gt;();
  
                  // This works - and the expectation is verifiable.
                  mockView.ExpectSet(mv =&gt; mv.Names);
  
                  // None of the following can be verified.
                  // mockView.ExpectSet(mv =&gt; mv.Names, It.Is&lt;Object&gt;(o =&gt; o != null));
                  // mockView.ExpectSet(mv =&gt; mv.Names, It.Is&lt;List&lt;string&gt;&gt;(names =&gt; names.Count == 3));
                  // mockView.ExpectSet(mv =&gt; mv.Names, It.IsAny&lt;IList&lt;String&gt;&gt;());
  
                  Controller controller = new Controller(mockView.Object);
                  controller.PopulateView();
                  try {
                      mockView.VerifyAll();
                      Console.WriteLine("Verified OK!");
                  } catch (MockException ex) {
                      Console.WriteLine("Verification failed!");
                      Console.WriteLine(ex.Message);
                  }
                  Console.ReadKey(false);
              }
          }
      }
  }
  </code></pre>