C# 在FluentAssertions中,为什么应该使用方法而不是属性?

C# 在FluentAssertions中,为什么应该使用方法而不是属性?,c#,.net,fluent-assertions,C#,.net,Fluent Assertions,在FluentAssertions中,可以以各种格式进行各种声明 x.Should().BeEquivalentTo(y); x.ShouldBeEquivalentTo(y); 都是有效的断言 为什么应该是方法而不是属性?我还没有看到任何例子表明,应该接受一个参数,所以在我看来,它可能很容易成为一个属性 你也可以断言 x.Should().NotBeNull().And.BeEquivalentTo(y); 这里,和是一个属性而不是一个方法。和和不应该是相同类型的元素(方法/属性)吗 TL

在FluentAssertions中,可以以各种格式进行各种声明

x.Should().BeEquivalentTo(y);
x.ShouldBeEquivalentTo(y);
都是有效的断言

为什么
应该
是方法而不是属性?我还没有看到任何例子表明,
应该
接受一个参数,所以在我看来,它可能很容易成为一个属性

你也可以断言

x.Should().NotBeNull().And.BeEquivalentTo(y);
这里,
是一个属性而不是一个方法。
不应该是相同类型的元素(方法/属性)吗

TL;DR 设计选择将
Should
作为FluentAssertions中的方法而不是属性是否有正当理由?

Should()
是添加到
x
类中的扩展方法。您只能添加扩展方法——C#没有扩展属性

NotBeNull()返回的任何类的属性。在那里,我们可以控制该类,并可以向其添加真实属性。

Should()
是一种方法,因为C语言的局限性。这是一种扩展方法;在
FluentAssertions
库中定义的方法,可用于调用任何类型(因此
x.Should()
)——即使类的原始代码未实现该方法

您无法实现扩展属性,因此
应该是一种方法

该方法返回
FluentAssertions
中定义的对象,就像
NotBeNull()
一样,因此这些对象可以包含相关/有用/有意义的属性


简而言之:有效的理由是它是唯一可用的选择。

如果您尝试使用属性,我认为链接不起作用。IOW方法链接技术需要方法。@DavidTansey,但它们正在使用
属性执行链接。链接只需要返回一个对象。可以使用方法或属性链接。