Как может быть двусмысленность между получателем свойства и методом с одним аргументом?

Не могу поверить, что никогда раньше не сталкивался с этим, но почему я получаю ошибку компилятора для этого кода?

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);
    }
}

Вот сообщение об ошибке:

Неоднозначность между 'FooBar. IsValid 'и' FooBar.IsValid (int) '

Почему это неоднозначно?

Я думаю, есть две причины, по которым это не должно быть двусмысленным:

  1. После IsConfused нет скобок ].
  2. Нет аргумента типа int для IsConfused .

Где неоднозначность?

12
задан abatishchev 7 July 2011 в 19:43
поделиться