NBuilder有以下两个fluent方法
.Has(..)
.Have(..)例如:
return Builder<User>.CreateListOfSize(100)
.WhereTheFirst(1)
.Has(x => x.FirstName = "Jon Skeet")
.Build();
return Builder<User>.CreateListOfSize(100)
.WhereTheFirst(1)
.Have(x => x.FirstName = "Jon Skeet")
.Build();我不明白有什么不同?有没有人能解释一下为什么我要做一个Have而不是Has ..或者反之亦然?
发布于 2011-03-16 08:45:22
它们是相同的。完整的源代码here。
有:
[Obsolete(Messages.NewSyntax_UseWith)]
public static IOperable<T> Has<T, TFunc>(this IOperable<T> operable, Func<T, TFunc> func)
{
return With(operable, func);
}有:
[Obsolete(Messages.NewSyntax_UseWith)]
public static IOperable<T> Have<T, TFunc>(this IOperable<T> operable, Func<T, TFunc> func)
{
return With(operable, func);
}发布于 2011-12-08 14:35:00
出现Has和Have的原因是为了在两种不同的用途中提供流畅的语法。
例如,在这种情况下,Has是有意义的:
Builder<User>.CreateListOfSize(100)
.WhereTheFirst(1)
.Has(x => x.FirstName = "Jon Skeet")
.Build();而在这种情况下,Have是有意义的:
Builder<User>.CreateListOfSize(100)
.WhereAll()
.Have(x => x.FirstName = "Jon Skeet")
.Build();然而,最近人们认识到,需要清理语法,以防止在创建列表与单个对象时由于语法差异而造成的混淆。
因此,现在您可以执行以下操作:
Builder<User>.CreateListOfSize(100)
.All()
.With(x => x.FirstName = "Jon")
.TheFirst(1)
.With(x => x.LastName = "Skeet")
.Build();...hopefully,这应该不会让人感到困惑。
此外,在ClosureCowboy给出的答案中,您会注意到当他回答...时,Has和Have扩展已经被标记为过时。
https://stackoverflow.com/questions/5319735
复制相似问题