В чем разница между.Has(..) и.Have(..) в NBuilder для.NET?
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();
Я не понимаю разницу? Может кто-нибудь объяснить, почему я бы сделал Хав вместо Х... или наоборот?
2 ответа
Они одинаковые. Полный исходный код здесь.
Имеет:
[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);
}
Причина была 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
расширения уже были помечены как устаревшие, когда он ответил...