- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个生成实体的工具,我需要生成用于测试的 samlpe 值。问题是我们有很多逻辑类型(一些类型相同但仍然不同)并且在编码之前我想知道是否有人有更简单的解决方案......
这是枚举:
public enum LogicalTypeEnum
{
Identity,
DateAndTime,
Binary,
Quantity,
Comment,
Money,
Rate,
TimeStamp,
Caption,
Reference,
Number,
Weight,
Space,
Username,
Phone,
Email,
ZipCode
}
谢谢!!!
编辑 1:我想生成一个随机值而不是从枚举中获取随机元素。我正在寻找一种方法来获取随机电子邮件、邮政编码或货币值(value)。
最佳答案
我认为您必须将答案分为两部分:
首先从列表中获取一个随机枚举类型。我认为这部分已经被提供的其他答案解决了。
之后,您想为所选枚举创建一个随机值列表。因此,您需要一个可以为每种类型创建有效随机值的工厂。最接近您需求的应该是 AutoPoco .例如,创建一堆填充了您喜欢的值的示例对象非常容易
var factory = AutoPoco.AutoPocoContainer.Configure(x =>
{
x.Conventions(c =>
{
c.UseDefaultConventions();
});
x.Include<DataRowWrapper>()
.Setup(row => row.Timestamp).Use<DateTimeUniqueSource>()
.Setup(row => row.Name).Use<LastNameSource>()
.Setup(row => row.Value).Use<ApproximateNumberSource<decimal>>()
.Setup(row => row.Description).Use<RandomReadableStringSource>(10, 20);
});
var session = factory.CreateSession();
var sampleRows = session.List<DataRowWrapper>(1000).Get();
如您所见,您可以为每个属性提供您自己的来源 ( .Use<...Source>()
)。项目中已经有一些默认源,但我也自己制作了一些,如下所示:
public class RandomReadableStringSource : DatasourceBase<string>
{
private readonly char[] _Vocals = new char[] { 'a', 'e', 'i', 'o', 'u' };
private readonly char[] _Consonants = new char[] { 'b', 'c', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'v', 'w' };
private Random _Random;
private int _Minimum;
private int _Maximum;
public RandomReadableStringSource()
: this(20)
{ }
public RandomReadableStringSource(int max)
: this(5, max)
{ }
public RandomReadableStringSource(int min, int max)
{
if (min <= 0)
{
throw new ArgumentOutOfRangeException("minimum must be greater zero.");
}
if (min > max)
{
throw new ArgumentOutOfRangeException("minimum must be less or equal maximum.");
}
_Random = new Random();
_Minimum = min;
_Maximum = max;
}
public override string Next(IGenerationSession session)
{
var length = _Random.Next(_Minimum, _Maximum);
var sb = new StringBuilder(length);
for (int i = 0; i < length; i++)
{
var array = i % 2 == 0 ? _Consonants : _Vocals;
sb.Append(array[_Random.Next(array.Length)]);
}
return sb.ToString();
}
}
public class DateTimeUniqueSource : DatasourceBase<DateTime>
{
private Random _Random;
private DateTime _LastDateTime;
public DateTimeUniqueSource()
: this(new DateTime(1900, 1, 1))
{ }
public DateTimeUniqueSource(DateTime startdate)
{
if (startdate == null)
{
throw new ArgumentNullException("startdate");
}
_Random = new Random();
_LastDateTime = startdate;
}
public override DateTime Next(IGenerationSession session)
{
_LastDateTime = _LastDateTime.AddHours(_Random.NextDouble() * 1000);
return _LastDateTime;
}
}
因此您可以为每种类型创建自己的源,然后很容易地创建一堆示例对象。
关于c# - 如何获取 LogicalTypes 的随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4884762/
我如何在 Swift 谓词中组合混合 AND OR 条件。我有以下查询 Select * from tblTemp where dept == 1 && (subdept == 11 || subd
我有一个生成实体的工具,我需要生成用于测试的 samlpe 值。问题是我们有很多逻辑类型(一些类型相同但仍然不同)并且在编码之前我想知道是否有人有更简单的解决方案...... 这是枚举: public
嘿 avro 用户和专家, 我想使用avro逻辑类型,意味着我自己创建一些 - 不仅仅是使用内置的。 问题是如何让编译器从模式生成代码以使用我自己创建的代码。 我创建了我的架构(相关部分): {
我需要能够标记 AVRO 架构中的某些字段,以便在序列化时对它们进行加密。 逻辑类型允许标记字段,并且与自定义转换一起应该允许让它们被 AVRO 透明地加密。 我在查找有关如何在 AVRO 中定义和使
我正在尝试使用以下简单的代码读取 Parquet 文件: ParquetReader reader = AvroParquetReader.builder(path).build()); Ge
我是一名优秀的程序员,十分优秀!