title: How can there be ambiguity between a property getter and a method with one argument?
body: <p>I can't believe I've never come across this before, but why am I getting a compiler error for this code?</p>
  
  <pre><code>public class Main
  {
      public Main()
      {
          var ambiguous = new FooBar(1);
          var isConfused = ambiguous.IsValid; // this call is ambiguous
      }
  }
  
  public class FooBar
  {
      public int DefaultId { get; set; }
  
      public FooBar(int defaultId)
      {
          DefaultId = defaultId;
      }
  
      public bool IsValid
      {
          get { return DefaultId == 0; }
      }
  
      public bool IsValid(int id)
      {
          return (id == 0);
      }
  }
  </code></pre>
  
  <p>Here is the error message:</p>
  
  <blockquote>
    <p>Ambiguity between 'FooBar.IsValid' and 'FooBar.IsValid(int)'</p>
  </blockquote>
  
  <p><strong>Why is this ambiguous?</strong></p>
  
  <p>I'm thinking there are two reasons it should not be ambiguous:</p>
  
  <ol>
  <li>There are no parenthases after <code>IsConfused</code>.</li>
  <li>There is no int argument for <code>IsConfused</code>.</li>
  </ol>
  
  <p>Where is the ambiguity?</p>