首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于.NET的NBuilder,.Has(..)那么.Have(..)呢?

对于.NET的NBuilder,.Has(..)那么.Have(..)呢?
EN

Stack Overflow用户
提问于 2011-03-16 08:38:45
回答 2查看 996关注 0票数 2

NBuilder有以下两个fluent方法

代码语言:javascript
复制
.Has(..)
.Have(..)

例如:

代码语言:javascript
复制
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 ..或者反之亦然?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-16 08:45:22

它们是相同的。完整的源代码here

有:

代码语言:javascript
复制
    [Obsolete(Messages.NewSyntax_UseWith)]
    public static IOperable<T> Has<T, TFunc>(this IOperable<T> operable, Func<T, TFunc> func)
    {
        return With(operable, func);
    }

有:

代码语言:javascript
复制
    [Obsolete(Messages.NewSyntax_UseWith)]
    public static IOperable<T> Have<T, TFunc>(this IOperable<T> operable, Func<T, TFunc> func)
    {
        return With(operable, func);
    }
票数 2
EN

Stack Overflow用户

发布于 2011-12-08 14:35:00

出现HasHave的原因是为了在两种不同的用途中提供流畅的语法。

例如,在这种情况下,Has是有意义的:

代码语言:javascript
复制
Builder<User>.CreateListOfSize(100)
    .WhereTheFirst(1)
        .Has(x => x.FirstName = "Jon Skeet")
    .Build();

而在这种情况下,Have是有意义的:

代码语言:javascript
复制
Builder<User>.CreateListOfSize(100)
    .WhereAll()
        .Have(x => x.FirstName = "Jon Skeet")
    .Build();

然而,最近人们认识到,需要清理语法,以防止在创建列表与单个对象时由于语法差异而造成的混淆。

因此,现在您可以执行以下操作:

代码语言:javascript
复制
Builder<User>.CreateListOfSize(100)
    .All()
        .With(x => x.FirstName = "Jon")
    .TheFirst(1)
        .With(x => x.LastName = "Skeet")
    .Build();

...hopefully,这应该不会让人感到困惑。

此外,在ClosureCowboy给出的答案中,您会注意到当他回答...时,HasHave扩展已经被标记为过时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5319735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档