В чем разница между .Has (..) и .Have (..) в NBuilder для .NET? - PullRequest
2 голосов
/ 16 марта 2011

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 ]

2 голосов
/ 16 марта 2011

Они идентичны. Полный исходный код здесь .

Имеет:

    [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 голос
/ 08 декабря 2011

Причина, по которой было 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 уже были помечены как устаревшие, когда он ответил ...

...