2

NBuilderには、次の流暢なメソッドが 2 つあります。

.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();

違いがわからない?Has ..の代わりにHaveをする理由、またはその逆を誰かが説明できますか?

4

2 に答える 2

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);
    }
于 2011-03-16T00:45:21.947 に答える
1

Hasそこにあった理由はHave、2つの異なる用途で流暢な構文を提供するためでした。

たとえば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拡張機能がすでに廃止としてマークされていることに気付くでしょう...

于 2011-12-08T06:34:59.793 に答える