zoukankan      html  css  js  c++  java
  • 根据类型自动生成随机数

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Reflection;
    using System.Text;
    
    namespace Qka.UsersApi.Test
    {
        public class ParaUtil
        {
            #region 随机获取常用类型值
    
    
            static Random rd = new Random();
    
            /// <summary>
            /// 随机int
            /// </summary>
            /// <returns></returns>
            public static int GetInt(int max)
            {
                return rd.Next(0, max);
            }
    
            /// <summary>
            /// 随机int
            /// </summary>
            /// <returns></returns>
            public static int GetInt(int min = int.MinValue, int max = int.MaxValue)
            {
                return rd.Next(min, max);
            }
    
            /// <summary>
            /// 随机long
            /// </summary>
            /// <returns></returns>
            public static long GetLong(long min = long.MinValue, long max = long.MaxValue)
            {
                if (long.TryParse(GetDouble((double)min, (double)max).ToString(), out long longValue))
                {
                    ///成功
                    return longValue;
                }
                //失败
                return GetInt();
    
            }
    
            /// <summary>
            /// 随机float
            /// </summary>
            /// <returns></returns>
            public static float GeFloat(float min = float.MinValue, float max = float.MaxValue)
            {
                if (float.TryParse(GetDouble((double)min, (double)max).ToString(), out float outValue))
                {
                    ///成功
                    return outValue;
                }
                //失败
                return GetInt();
    
            }
    
    
            /// <summary>
            /// 随机Double
            /// </summary>
            /// <returns></returns>
            public static double GetDouble(double min = double.MinValue, double max = double.MaxValue)
            {
                if (rd != null)
                {
                    return rd.NextDouble() * (max - min) + min;
                }
                else
                {
                    return 0.0d;
                }
            }
    
            /// <summary>
            /// 随机string
            /// </summary>
            /// <returns></returns>
            public static string GetString()
            {
                return GetString(GetInt(0, 1000), GetBoolean(), GetInt());
            }
            /// <summary>
            /// 随机string
            /// </summary>
            /// <returns></returns>
            public static string GetString(int maxSize)
            {
                var size = GetInt(0, maxSize);
                return GetString(size, GetBoolean(), GetInt());
            }
            /// <summary>
            /// 随机string
            /// </summary>
            /// <returns></returns>
            public static string GetString(int size, bool isNum = false, int isLower = -1)
            {
                StringBuilder builder = new StringBuilder();
                char ch = '0';
    
                for (int i = 0; i < size; i++)
                {
                    if (isNum)
                    {
                        ch = Convert.ToChar(Convert.ToInt32(9 * rd.NextDouble() + 48));
                    }
                    else
                    {
                        if (isLower < 0)
                        {
                            int index = Convert.ToInt32(size * rd.NextDouble()) % 2 == 0 ? 65 : 97;
                            ch = Convert.ToChar(Convert.ToInt32(25 * rd.NextDouble() + index));
                        }
                        else if (isLower == 0)
                        {
                            ch = Convert.ToChar(Convert.ToInt32(25 * rd.NextDouble() + 65));
                        }
                        
                        else if (isLower > 0)
                        {
                            ch = Convert.ToChar(Convert.ToInt32(25 * rd.NextDouble() + 97));
                        }
                    }
                    builder.Append(ch);
                }
                return builder.ToString();
            }
    
            /// <summary>
            /// 随机datetime
            /// </summary>
            /// <returns></returns>
            public static DateTime GetDateTime()
            {
                return GetDate(DateTime.MinValue, DateTime.MaxValue);
            }
            /// <summary>
            /// 随机datetime
            /// </summary>
            /// <returns></returns>
            public static DateTime GetDate(DateTime minDate, DateTime maxDate)
            {
                int totalDays = (int)((TimeSpan)maxDate.Subtract(minDate)).TotalDays;
                int randomDays = rd.Next(0, totalDays);
                return minDate.AddDays(randomDays);
            }
            /// <summary>
            /// 随机bool
            /// </summary>
            /// <returns></returns>
            public static bool GetBoolean()
            {
                return (GetInt(0, 2) == 0);
            }
            /// <summary>
            /// 随机char
            /// </summary>
            /// <returns></returns>
            public static char GetChar()
            {
                return Convert.ToChar(Convert.ToInt32(26 * rd.NextDouble() + 64));
            }
            /// <summary>
            /// 随机byte
            /// </summary>
            /// <returns></returns>
            public static byte GetByte()
            {
                return GetByte(0, byte.MaxValue);
            }
            /// <summary>
            /// 随机byte
            /// </summary>
            /// <returns></returns>
            public static byte GetByte(byte min, byte max)
            {
                return (byte)GetInt((int)min, (int)max);
            }
            /// <summary>
            /// 随机shrot
            /// </summary>
            /// <returns></returns>
            public static short GetShort()
            {
                return GetShort(0, short.MaxValue);
            }
            /// <summary>
            /// 随机short
            /// </summary>
            /// <returns></returns>
            public static short GetShort(short min, short max)
            {
                return (short)GetInt((int)min, (int)max);
            }
    
            #endregion
    
    
            #region 如果是实体类型
    
            public static T GetModelData<T>(bool isGetOkData = false) where T : new()
            {
                var model = new T();
                var t = typeof(T);
    
                PropertyInfo[] properties = t.GetProperties();
    
                foreach (PropertyInfo property in properties)
                {
                    Type oneType = property.PropertyType;
    
                    if (IsNullableType(oneType))
                    {
                        if (!GetBoolean())
                        {
                            //对于可空类型,随机给空值
                            continue;
                        }
                        oneType = property.PropertyType.GetGenericArguments()[0];
                    }
                    if (isGetOkData)
                    {
    
                        var paraValue = GetValueBySLAttribute(property);
                        if (paraValue != null)
                        {
    
                            property.SetValue(model, paraValue);
                            continue;
                        }
                    }
                    if (!oneType.IsValueType)
                    {
                        if (!GetBoolean())
                        {
                            //如果是引用类型,又不要求一定要合理的值,则可以为空
                            continue;
                        }
                    }
                    property.SetValue(model, GetValueByType(oneType, 0));
    
                }
                return model;
            }
    
            /// <summary>
            /// 根据有标识长度限制的特性来生成对应的值
            /// </summary>
            /// <param name="property"></param>
            /// <returns></returns>
            private static string GetValueBySLAttribute(PropertyInfo property)
            {
                var allAttribute = property.GetCustomAttributes(true);
                if (allAttribute == null)
                {
                    return null;
                }
                foreach (var item in allAttribute)
                {
                    if (item is StringLengthAttribute)
                    {
                        var slAttribute = item as StringLengthAttribute;
    
                        var paraVal = GetString(slAttribute.MaximumLength);
                        bool isok = false;
                        while (!isok)
                        {
                            paraVal = GetString(slAttribute.MaximumLength);
                            isok = ValidValue(slAttribute, paraVal);
                        }
                        return paraVal;
    
                    }
                }
    
                return null;
            }
    
            /// <summary>
            /// 验证将要给的值是否合格
            /// </summary>
            /// <param name="slAttribute"></param>
            /// <param name="paraVal"></param>
            /// <returns></returns>
            private static bool ValidValue(StringLengthAttribute slAttribute, string paraVal)
            {
                if (slAttribute.IsValid(paraVal))
                {
                    return true;
    
                }
                return false;
            }
    
            private static bool IsNullableType(Type theType)
            {
                return (theType.IsGenericType && theType.
                  GetGenericTypeDefinition().Equals
                  (typeof(Nullable<>)));
            }
    
            private static object GetValueByType(Type paraType, int maxSize = 0)
            {
                if (paraType == typeof(string))
                {
                    if (maxSize > 0)
                    {
                        return GetString(maxSize);
                    }
                    return GetString();
                }
                if (paraType == typeof(Int16))
                {
                    return GetInt(Int16.MinValue, Int16.MaxValue);
                }
                if (paraType == typeof(int))
                {
                    return GetInt();
                }
                if (paraType == typeof(Int32))
                {
                    return GetInt();
                }
                if (paraType == typeof(Int64))
                {
                    return GetLong();
                }
                if (paraType == typeof(long))
                {
                    return GetLong();
                }
                if (paraType == typeof(float))
                {
                    return GeFloat();
                }
                if (paraType == typeof(double))
                {
                    return GetDouble();
                }
                if (paraType == typeof(bool))
                {
                    return GetBoolean();
                }
                if (paraType == typeof(DateTime))
                {
                    return GetDateTime();
                }
    
                return null;
            }
    
            /// <summary>
            /// 验证实体中的StringLength特性能否够
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="model"></param>
            /// <returns>false为不通过,true为通过</returns>
            public static bool IsValidate<T>(T model)
            {
                var t = typeof(T);
                PropertyInfo[] properties = t.GetProperties();
    
                foreach (PropertyInfo property in properties)
                {
                    //object[] Attribute2 = p.GetCustomAttributes(typeof(MarkAttribute), false);
                    var allAttribute = property.GetCustomAttributes(true);
                    if (allAttribute == null)
                    {
                        continue;
                    }
                    foreach (var item in allAttribute)
                    {
                        if (item is StringLengthAttribute)
                        {
                            var slAttribute = item as StringLengthAttribute;
                            var validateVal = property.GetValue(model, null);
    
                            if (!slAttribute.IsValid(validateVal))
                            {
                                return false;
    
                            }
                        }
                    }
    
                }
    
                return true;
    
            }
    
    
            #endregion
    
        }
    }
    
     
  • 相关阅读:
    活脑筋的相信机会!
    亿万富翁巴菲特的理财习惯大揭秘
    让你的创业失败的18个昏招 都归结到这里
    创业成功的基础:时间管理
    三个故事的启发
    张瑞敏:借来的火点不亮自己的心灵
    李嘉诚谈管理艺术:想当老板还是领袖
    高燃:“80后人精儿”是这样炼成的
    比尔盖茨的11条人生箴言(英汉对照)
    笔者认为,中国的互联网行业需要真正的CEO
  • 原文地址:https://www.cnblogs.com/qiywtc/p/9057445.html
Copyright © 2011-2022 走看看