博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#表驱动法+一点反射实现“得到指定位数随机不重复字符串”三种方式的封装...
阅读量:5103 次
发布时间:2019-06-13

本文共 4162 字,大约阅读时间需要 13 分钟。

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{...}

      :该类中的方法来自:

1     public class GetMethods 2     { 3         public int codeCount=4; 4         static int rep = 0; 5  6         ///  7         /// 产生随机codeCount位数字组合代码 8         ///  9         /// 组合位数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         /// 25         /// 产生随机codeCount位字母组合代码26         /// 27         /// 组合位数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         /// 43         /// 产生随机codeCount位数字与字母组合代码44         /// 45         /// 组合位数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                 else61                 {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.下载

 

 

      地址:

5.总结

 

 

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

 

 

转载于:https://www.cnblogs.com/smlusm/p/3234541.html

你可能感兴趣的文章
PL/SQL Developer 8注册码
查看>>
IDEA拷贝操作
查看>>
Groovy中那些神奇注解之ToString
查看>>
如何在IDEA 中使用Git
查看>>
宇宙第一开发工具:vs2019 开发Python
查看>>
Tomcat Https配置
查看>>
百度地图 android SDKv2.2.0
查看>>
[贪心][模拟] Jzoj P5811 简单的填数
查看>>
react样式
查看>>
document.body
查看>>
大话存储系列21——存储系统内部IO 上
查看>>
检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法
查看>>
关于mybatis中基本类型条件判断问题
查看>>
RDD之二:原理
查看>>
Struts2.0 xml文件的配置(package,namespace,action)
查看>>
转载:【Oracle 集群】RAC知识图文详细教程(四)--缓存融合技术和主要后台进程
查看>>
2018-2019-2 网络对抗技术 20165301 Exp 9 Web安全基础
查看>>
将20180608141920转成date格式
查看>>
位操作
查看>>
待续--mysql中key 、primary key 、unique key 与index区别
查看>>