• C#表驱动法+一点反射实现“得到指定位数随机不重复字符串”三种方式的封装


    1.结构

     一个类 public class GetMethods{...}

         类中的变量:                                                                 

    int codeCount=4 定义获取随机字符串的位数,默认4
    int rep = 0 方法体中一个自增的变量

       

        

         类中的方法,三种获取方式:

    string GetNum()

    获得数字组合的字符串
    string GetStr() 获得字母组合的字符串
    string GetStrAndNum() 获得数字和字母混合组合的字符串

     第二个public class GetString{...}

         类中的变量:                                                 

    enum Code{ NUM,STR,StrAndNum } 定义枚举作为参数,选择获取方式
       

         类中的方法:

    static string GetRandomCode(Code codeType,int codeCount) (重载)获取字符串总方法,参数为获取方式与组合位数
    static string GetRandomCode(Code codeType) (重载)获取字符串总方法,参数为获取方式,默认4位
    string ActionInTable(Code code)  表驱动的方法体,参数为获取方式
    2.代码

      

         

          1)一个类 public class GetMethods{...}

          :该类中的方法来自:http://www.cnblogs.com/xiachufeng/archive/2012/04/01/2429065.html

     1     public class GetMethods
     2     {
     3         public int codeCount=4;
     4         static int rep = 0;
     5 
     6         /// <summary>
     7         /// 产生随机codeCount位数字组合代码
     8         /// </summary>
     9         /// <param name="codeCount">组合位数</param>
    10         public string GetNum()
    11         {
    12             string str = string.Empty;
    13             long num2 = DateTime.Now.Ticks + rep;
    14             rep++;
    15             Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
    16             for (int i = 0; i < codeCount; i++)
    17             {
    18                 int num = random.Next();
    19                 str = str + ((char)(0x30 + ((ushort)(num % 10)))).ToString();
    20             }
    21             return str;
    22         }
    23 
    24         /// <summary>
    25         /// 产生随机codeCount位字母组合代码
    26         /// </summary>
    27         /// <param name="codeCount">组合位数</param>
    28         public string GetStr()
    29         {
    30             string str = string.Empty;
    31             long num2 = DateTime.Now.Ticks + rep;
    32             rep++;
    33             Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
    34             for (int i = 0; i < codeCount; i++)
    35             {
    36                 int num = random.Next();
    37                 str = str + ((char)(0x41 + ((ushort)(num % 0x1a)))).ToString();
    38             }
    39             return str;
    40         }
    41 
    42         /// <summary>
    43         /// 产生随机codeCount位数字与字母组合代码
    44         /// </summary>
    45         /// <param name="codeCount">组合位数</param>
    46         public string GetStrAndNum()
    47         {
    48             string str = string.Empty;
    49             long num2 = DateTime.Now.Ticks + rep;
    50             rep++;
    51             Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
    52             for (int i = 0; i < codeCount; i++)
    53             {
    54                 char ch;
    55                 int num = random.Next();
    56                 if ((num % 2) == 0)
    57                 {
    58                     ch = (char)(0x30 + ((ushort)(num % 10)));
    59                 }
    60                 else
    61                 {
    62                     ch = (char)(0x41 + ((ushort)(num % 0x1a)));
    63                 }
    64                 str = str + ch.ToString();
    65             }
    66             return str;
    67         }
    68     }

        

          2)二个public class GetString{...}  

     1     public class GetString
     2     {
     3         public enum Code{ NUM,STR,StrAndNum }
     4 
     5         public static string GetRandomCode(Code codeType,int codeCount)
     6         {
     7             GetMethods getMethod=new GetMethods();
     8             getMethod.codeCount = codeCount;
     9             var addMethod = typeof(GetMethods).GetMethod(ActionInTable(codeType));
    10             return (string)addMethod.Invoke(getMethod,null);
    11         }
    12 
    13         //重载,默认4位
    14         public static string GetRandomCode(Code codeType)
    15         {
    16             GetMethods getMethod=new GetMethods();
    17             var addMethod = typeof(GetMethods).GetMethod(ActionInTable(codeType));
    18             return (string)addMethod.Invoke(getMethod,null);
    19         }
    20         
    21         static string ActionInTable(Code code)
    22         {
    23             string[] methods = { "GetNum", "GetStr", "GetStrAndNum" };
    24             return methods[(int)code];
    25         }
    26     }


     

    3.应用

        

         将该两个类封装到类库中,即可方便使用,我将他们封装到了StringControl.dll中,将其添加到引用中,引用命名空间using StringControl;

    using StringControl;//引用命名空间
    ///代码省略
    //.....................
    ///代码省略
    //使用方法

    string RandomKey = GetString.GetRandomCode(GetString.Code.StrAndNum,8);
    string RandomKey1 = GetString.GetRandomCode(GetString.Code.StrAndNum); //4位
    ///代码省略
    //.....................
    ///代码省略
    4.下载

          地址:http://files.cnblogs.com/smlusm/StringControl.zip

    5.总结

           利用该方法,有时可以避免过长的if与switch语句,确实方便,有想法的同学,还望不吝赐教!

  • 相关阅读:
    libevent源码学习之event
    游戏寻路A*算法
    游戏地图动态生成
    一个基于protocol buffer的RPC实现
    TCMalloc源码学习(四)(小内存块释放)
    TCMalloc源码学习(三)(小块内存分配)
    TCMalloc源码学习(二)
    第五十四篇 Linux相关——远程连接SSH
    第五十三篇 Linux相关——Web服务器
    第五十二篇 Linux相关——数据库服务MySQL
  • 原文地址:https://www.cnblogs.com/smlusm/p/3234541.html
Copyright © 2020-2023  润新知