NBuilder有两种以下流畅的方法
.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();
我不明白这个区别?有人可以解释为什么我会做一个而不是有...反之亦然?
答案 0 :(得分:2)
他们是完全相同的。完整源代码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);
}
答案 1 :(得分:1)
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();
......希望未来可能不那么混乱。
另外,你会在ClosureCowboy给出的答案中注意到Has
和Have
扩展已经被标记为过时了,当他回答时......