繁体   English   中英

如何根据数据类型生成随机变量?

[英]How can I generate random variables according to data types?

我有一些数据库和表。 我正在尝试检测每一列的数据类型并根据数据类型创建随机变量?


例如:

col1 : int
col2 : nvarchar(max)
col3 : bit

我需要检测代码中的每种数据类型,并为插入创建随机变量。

我是否应该为此创建一个检查所有数据类型并生成变量的方法? 喜欢:

if(datatype.Equals("int"))
   random.Next();
else if(datatype.Equals("string"))
   ...

有什么简单的方法吗?


这是一种方法:

var random = new Random();
var factory = new Dictionary<Type, Func<object>>()
{
    { typeof(int), () => random.Next() },
    { typeof(string), () =>
        {
            var bytes = new byte[16];
            random.NextBytes(bytes);
            return Convert.ToBase64String(bytes);
        }
    },
    { typeof(DateTime), () => DateTime.Now.AddDays((random.NextDouble() - 0.5) * 100) },
};

然后,您可以执行以下操作:

var datatype = typeof(string);
var output = factory[datatype]();
Console.WriteLine(output);

我得到eyqQ1EdMDTsR8Ny8kS73Hg==作为示例输出。

您只需要继续构建所需的所有类型。

没有内置的“ SQL Server数据类型-> .NET数据类型”映射表; 因此,您必须自己进行映射。

您可以检查SQL Server到.Net类型的转换

Random类提供Random.Next()Random.NextBytes()Random.NextDouble()方法。 Random.Next()方法返回一个随机数, Random.NextBytes()返回一个填充有随机数的字节数组, Random.NextDouble()返回一个介于0.0和1.0之间的随机数。

Random.Next()方法具有三种重载形式,允许您设置随机数的最小和最大范围。

以下代码返回一个随机数。

int num = random.Next();

以下代码返回小于1000的随机数。

int num = random.Next(1000);

以下代码返回最小和最大范围之间的随机数。 生成两个数字之间的随机数

public int RandomNumber(int min, int max)  
{  
    Random random = new Random();  
    return random.Next(min, max);  
}

您甚至可以结合使用两种方法-RandomNumber和RandomString来生成随机字符串和数字的组合。

// Generate a random string with a given size  
public string RandomString(int size, bool lowerCase)  
{  
    StringBuilder builder = new StringBuilder();  
    Random random = new Random();  
    char ch;  
    for (int i = 0; i < size; i++)  
    {  
        ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));  
        builder.Append(ch);  
    }  
    if (lowerCase)  
        return builder.ToString().ToLower();  
    return builder.ToString();  
}

参考

要了解映射,请点击此链接

使用GetType()方法可了解C#中的数据类型。 你可以在这里了解

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM