Почему nameof() выдает неоднозначное предупреждение о вызове в выражении Linq, но не когда я использую то же значение, что и строка?

Я получаю предупреждение компилятора, которое появилось, когда я обновился до FluentAssertions 4.2.2. В следующем коде, если я вызываю EndsWith(nameof(x)), я получаю предупреждение о неоднозначном вызове. Если вместо этого я определяю var foo = nameof(x) и вызываю EndsWith(foo), он компилируется чисто. Код работает нормально в обоих сценариях.

Мои вопросы: почему это происходит, и есть ли обходной путь, кроме сохранения результата nameof() в переменной?

[Test]
public void TestLastNamesAreSame()
{
    var original = new MyDTO("fred", "jones");
    var expected = new MyDTO("barney", "jones");

    // this gives an Ambiguous invocation warning
    expected.ShouldBeEquivalentTo(original, o => o
        .Excluding(x => x.SelectedMemberPath.EndsWith(nameof(MyDTO.FirstName))));

    // but when I use a variable holding the same value, it works without warning
    const string nameOfFirstNameField = nameof(MyDTO.FirstName);
    expected.ShouldBeEquivalentTo(original, o => o
        .Excluding(x => x.SelectedMemberPath.EndsWith(nameOfFirstNameField)));
}

public class MyDTO
{
    public string FirstName { get; }
    public string LastName { get; }

    public MyDTO(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }
}

person herky    schedule 17.02.2016    source источник
comment
Можешь показать свой MyDTO класс? Я создал простой класс со свойствами LastName и FirstName и конструктором, но не смог воспроизвести его. Оба работали.   -  person Szabolcs Dézsi    schedule 18.02.2016
comment
@SzabolcsDézsi это оказывается (ложным?) Предупреждением Resharper, а не предупреждением компилятора, поэтому я не совсем обеспокоен, хотя это все еще раздражает. Я отредактировал вопрос, включив в него класс MyDTO, хотя вы, скорее всего, увидите предупреждение, только если используете R#.   -  person herky    schedule 18.02.2016
comment
Я использую ReSharper 10 и не вижу предупреждения.   -  person Szabolcs Dézsi    schedule 18.02.2016
comment
Хотя я вижу некоторые проблемы в системе отслеживания проблем ReSharper, связанные с nameof и ложными предупреждениями. Так что, вероятно, это уже было исправлено.   -  person Szabolcs Dézsi    schedule 18.02.2016
comment
Спасибо за это обновление @SzabolcsDézsi. У меня Resharper 9.2, так что, вероятно, проблема в нем.   -  person herky    schedule 18.02.2016


Ответы (1)


Вы уверены, что это ошибка/предупреждение компилятора, а не предупреждение ReSharper?

Если первое, то какой номер ошибки/предупреждения CSNNNN?

Посмотрите (Resharper: неоднозначный вызов)

person Jens Meinecke    schedule 17.02.2016
comment
Я думаю, вы, наверное, правы. Я проверю и отвечу здесь. Несмотря ни на что, спасибо за подсказку. - person herky; 18.02.2016
comment
Как предположил Übercoder, это проблема Resharper, которая, как подтвердил Сабольч Дези, исправлена ​​в Resharper 10. - person herky; 18.02.2016