如何获取LogicalTypes的随机值
我有一个生成实体的工具,我需要生成一个samlpe值进行测试。 问题是我们有很多逻辑类型(一些相同的类型,但仍然不同)和编码,我想知道是否有人有一个更容易的解决方案…
这是Enum:
public enum LogicalTypeEnum { Identity, DateAndTime, Binary, Quantity, Comment, Money, Rate, TimeStamp, Caption, Reference, Number, Weight, Space, Username, Phone, Email, ZipCode }
谢谢!!!
编辑1:我想生成一个随机值,而不是从枚举中获取随机元素。 我正在寻找一种随机的电子邮件或邮政编码或金钱价值的方法。
我认为你必须将你的答案分成两部分:
首先从列表中获取随机枚举类型。 我认为这部分已经通过提供的其他答案解决了。
之后,您希望为所选枚举创建随机值列表。 因此,您需要一个可以为每种类型创建有效随机值的工厂。 最接近您需求的东西应该是AutoPoco 。 例如,创建一堆样本对象很容易填充一些您喜欢的值
var factory = AutoPoco.AutoPocoContainer.Configure(x => { x.Conventions(c => { c.UseDefaultConventions(); }); x.Include() .Setup(row => row.Timestamp).Use() .Setup(row => row.Name).Use() .Setup(row => row.Value).Use>() .Setup(row => row.Description).Use(10, 20); }); var session = factory.CreateSession(); var sampleRows = session.List(1000).Get();
如您所见,您可以为每个属性提供您自己的Source( .Use<...Source>()
)。 项目中已经有一些默认来源,但我也自己做了一些如下:
public class RandomReadableStringSource : DatasourceBase { 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 { 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; } }
因此,您可以为每种类型创建自己的源,然后很容易创建一堆示例对象。
您可以创建一个从0到枚举项目计数的随机数(您可以通过Enum.GetNames().Length
获取它们),然后将数字转换为您的LogicalTypeEnum
。
您可以使用以下代码片段进行操作(注意:这只是1个随机值,重用Random generator和enumItemsCount用于下一个项目;))
var r = new Random(); int enumItemsCount = Enum.GetValues(typeof(LogicalTypeEnum)).Length; LogicalTypeEnum randomLogicalType = (LogicalTypeEnum)r.Next(enumItemsCount - 1);
- 在移动服务数据库上启用代码优先迁移时出错
- 从序列化ViewModel还原时,Combox SelectedItem不适用
- Shell命名空间扩展。 C#。 C ++,MFC,AT-用什么?
- Webbrowser:当托管网页上的链接未触发DocumentCompleted时,对活动进行排序
- .Include()。Where()。Linq to Entities Query中的.Select()
- C api到C#GUI
- 在EF Code First中跟踪SQL查询
- System.Data.SqlClient.SqlException与网络相关或特定于实例的错误
- C#与C ++性能 – 为什么.NET不执行最基本的优化(如死代码消除)?