【发布时间】:2016-05-29 20:36:52
【问题描述】:
当我升级到 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;
}
}
【问题讨论】:
-
你能展示你的
MyDTO类吗?我用LastName和FirstName属性和构造函数创建了一个简单的类,但我无法重现它。两者都有效。 -
@SzabolcsDézsi 这被证明是一个(虚假的?)Resharper 警告,而不是编译器警告,所以我不太担心,尽管它仍然很烦人。我已编辑问题以包含 MyDTO 类,但如果您使用 R#,您可能只会看到警告。
-
我正在使用 ReSharper 10,但没有看到警告。
-
虽然我可以在 ReSharper 的问题跟踪器中看到一些与
nameof和错误警告相关的问题。所以可能它已经修复了。 -
感谢@SzabolcsDézsi 的更新。我有 Resharper 9.2,所以这可能是问题所在。
标签: c# resharper c#-6.0 fluent-assertions nameof