gpt4 book ai didi

c# - 伪造的伪造数据 : Conditional and random in the same field, 可能留下空的伪造数据

转载 作者:行者123 更新时间:2023-12-04 01:09:43 25 4
gpt4 key购买 nike

在使用 .net Bogus github 存储库填充数据库时,我想随机填充一个字段,例如:

{“妈妈”、“姐姐”、“哥哥”、“爸爸”、“叔叔”、“侄女”、“侄子”、“表姐”}

但也会随机留下偶尔的空值?

我尝试将它们链接在一起,但似乎没有编译器喜欢的语法。

                .RuleFor(u => u.Gender, f => f.PickRandom<Gender>().ToString())
.RuleFor(u => u.BirthDate, f => f.Date.PastOffset(60,
DateTime.Now.AddYears(-18)).Date.ToShortDateString())
.RuleFor(u => u.FirstName, (f, u) => f.Name.FirstName(ReturnGenderType(u.Gender)))
.RuleFor(u => u.MiddleName, (f, u) => f.Name.FirstName(ReturnGenderType(u.Gender)))
.RuleFor(u => u.LastName, (f, u) => f.Name.LastName(ReturnGenderType(u.Gender)))
.RuleFor(u => u.Salutation, (f, u) => f.Name.Prefix(ReturnGenderType(u.Gender)))

private static Bogus.DataSets.Name.Gender ReturnGenderType(string genderString)
{
if (genderString == "Male")
{
return Bogus.DataSets.Name.Gender.Male;
}
else
{
return Bogus.DataSets.Name.Gender.Female;
}
}

在这个例子中,它看起来可能必须是一个扩展,因为 Gender 类型稍后会反馈到理智但随机的名称中。

最佳答案

如果你想要 假冒要在规则中生成“有时为空”的值,您可以使用方便的 .OrNull()扩展方法。以下示例显示以 20% 的概率生成可空值:

void Main()
{
var userFaker = new Faker<User>()
.RuleFor( u => u.FirstName, f => f.Name.FirstName())
.RuleFor( u => u.LastName, f => f.Name.LastName().OrNull(f, .2f) );

userFaker.Generate(10).Dump();
}

public class User{
public string FirstName{get;set;}
public string LastName{get;set;}
}



您也可以删除 ReturnGenderType辅助方法和使用 f => f.Person属性(property)代替。总结一下,以下是您的代码清理方式:

void Main()
{
var userFaker = new Faker<User>()
.RuleFor(u => u.Gender, f => f.Person.Gender.ToString())
.RuleFor(u => u.BirthDate, f => f.Date.PastOffset(60, DateTime.Now.AddYears(-18)).Date.ToShortDateString())
.RuleFor(u => u.FirstName, f => f.Person.FirstName)
.RuleFor(u => u.MiddleName, f => f.Name.FirstName(f.Person.Gender).OrNull(f, .2f))
.RuleFor(u => u.LastName, f => f.Person.LastName)
.RuleFor(u => u.Salutation, f => f.Name.Prefix(f.Person.Gender));

userFaker.Generate(10).Dump();
}

public class User
{
public string Gender { get; set; }
public string BirthDate { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string Salutation { get; set; }
}



顺便说一句, 称呼 f.Name.Prefix(Gender) 生成有时不正确,因为性别前缀未在 en 中分开语言环境。如果这是一个问题,您可以扩展 假冒使用可修复您的语言环境的扩展方法多一点:

public static class MyExtensionsForBogus{
public static string Prefix2(this Bogus.DataSets.Name name, Gender gender)
{
if (gender == Gender.Male)
{
return name.Random.ArrayElement(new[] { "Mr.", "Dr." });
}
return name.Random.ArrayElement(new[]{"Miss", "Ms.", "Mrs."});
}
}

然后,新 称呼 规则变为:

    .RuleFor(u => u.Salutation, f => f.Name.Prefix2(f.Person.Gender));

现在你在那里得到了一些漂亮的数据:



希望有帮助! =)

关于c# - 伪造的伪造数据 : Conditional and random in the same field, 可能留下空的伪造数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com