You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NBuilder为Person类填充指定范围的嵌套HashSet<int>?

解决NBuilder生成带指定范围HashSet的Person列表问题

我之前也碰到过类似的情况——NBuilder默认不会自动填充HashSet<int>这类复杂集合,所以才会出现null的情况。咱们只需要给NBuilder指定自定义的填充逻辑,就能生成符合要求的随机HashSet了。

第一步:明确Person类定义

假设你的Person类结构如下:

public class Person
{
    public HashSet<int> NumberSet { get; set; }
    // 其他属性(如Name、Age)可按需保留
}

第二步:自定义HashSet生成逻辑

写一个方法来生成元素范围1-50的随机HashSet,还可以灵活控制集合的元素数量(示例中随机生成2到8个元素,你可以根据需求调整):

private static HashSet<int> GenerateRandomNumberSet()
{
    var random = new Random();
    var numberSet = new HashSet<int>();
    // 随机设置集合元素数量
    int elementCount = random.Next(2, 9);
    
    while (numberSet.Count < elementCount)
    {
        // 生成1-50的随机整数(Next上限为开区间,所以写51)
        int randomNum = random.Next(1, 51);
        numberSet.Add(randomNum);
    }
    
    return numberSet;
}

第三步:用NBuilder结合自定义逻辑生成Person列表

通过NBuilder的.With()方法,给每个Person的NumberSet属性赋值咱们生成的HashSet:

using NBuilder;
using System.Collections.Generic;

// 生成包含10个Person的测试列表
var personList = Builder<Person>.CreateListOfSize(10)
    .All()
    .With(p => p.NumberSet = GenerateRandomNumberSet())
    // 若有其他属性需要填充,可继续链式调用.With()
    // .With(p => p.Name = "测试姓名")
    .Build();

额外优化:用NBuilder内置RandomGenerator

如果你想直接用NBuilder自带的随机工具,也可以内联编写逻辑(无需自己实例化Random):

var personList = Builder<Person>.CreateListOfSize(10)
    .All()
    .With(p => 
    {
        p.NumberSet = new HashSet<int>();
        var generator = new RandomGenerator();
        int count = generator.Next(1, 6); // 生成1-5个元素
        for (int i = 0; i < count; i++)
        {
            p.NumberSet.Add(generator.Next(1, 51));
        }
    })
    .Build();

关键说明

  • NBuilder仅会自动填充简单值类型(如int、string)和部分常见简单集合(如List<T>),像HashSet<T>这类特殊集合必须显式指定填充逻辑。
  • 注意Random实例的复用:如果在循环中频繁创建Random,可能会生成重复数值,建议在方法内仅实例化一次。

内容的提问来源于stack exchange,提问作者Guerrilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:13:09