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
public class GetMethods
{
public int codeCount=;
static int rep = ; /// <summary>
/// 产生随机codeCount位数字组合代码
/// </summary>
/// <param name="codeCount">组合位数</param>
public string GetNum()
{
string str = string.Empty;
long num2 = DateTime.Now.Ticks + rep;
rep++;
Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
for (int i = ; i < codeCount; i++)
{
int num = random.Next();
str = str + ((char)(0x30 + ((ushort)(num % )))).ToString();
}
return str;
} /// <summary>
/// 产生随机codeCount位字母组合代码
/// </summary>
/// <param name="codeCount">组合位数</param>
public string GetStr()
{
string str = string.Empty;
long num2 = DateTime.Now.Ticks + rep;
rep++;
Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
for (int i = ; i < codeCount; i++)
{
int num = random.Next();
str = str + ((char)(0x41 + ((ushort)(num % 0x1a)))).ToString();
}
return str;
} /// <summary>
/// 产生随机codeCount位数字与字母组合代码
/// </summary>
/// <param name="codeCount">组合位数</param>
public string GetStrAndNum()
{
string str = string.Empty;
long num2 = DateTime.Now.Ticks + rep;
rep++;
Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
for (int i = ; i < codeCount; i++)
{
char ch;
int num = random.Next();
if ((num % ) == )
{
ch = (char)(0x30 + ((ushort)(num % )));
}
else
{
ch = (char)(0x41 + ((ushort)(num % 0x1a)));
}
str = str + ch.ToString();
}
return str;
}
}
2)第二个类 public class GetString{...}
public class GetString
{
public enum Code{ NUM,STR,StrAndNum } public static string GetRandomCode(Code codeType,int codeCount)
{
GetMethods getMethod=new GetMethods();
getMethod.codeCount = codeCount;
var addMethod = typeof(GetMethods).GetMethod(ActionInTable(codeType));
return (string)addMethod.Invoke(getMethod,null);
} //重载,默认4位
public static string GetRandomCode(Code codeType)
{
GetMethods getMethod=new GetMethods();
var addMethod = typeof(GetMethods).GetMethod(ActionInTable(codeType));
return (string)addMethod.Invoke(getMethod,null);
} static string ActionInTable(Code code)
{
string[] methods = { "GetNum", "GetStr", "GetStrAndNum" };
return methods[(int)code];
}
}
| 3.应用 |
将该两个类封装到类库中,即可方便使用,我将他们封装到了StringControl.dll中,将其添加到引用中,引用命名空间using StringControl;
using StringControl;//引用命名空间
///代码省略
//.....................
///代码省略
//使用方法 string RandomKey = GetString.GetRandomCode(GetString.Code.StrAndNum,);
string RandomKey1 = GetString.GetRandomCode(GetString.Code.StrAndNum); //4位
///代码省略
//.....................
///代码省略
| 4.下载 |
地址:http://files.cnblogs.com/smlusm/StringControl.zip
| 5.总结 |
利用该方法,有时可以避免过长的if与switch语句,确实方便,有想法的同学,还望不吝赐教!
C#表驱动法+一点反射实现“得到指定位数随机不重复字符串”三种方式的封装的更多相关文章
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
js replace 全局替换 js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...
- PHP连接数据库、创建数据库、创建表的三种方式
这篇博客主要介绍了三种方式来连接MySQL数据库以及创建数据库.创建表.(代码是我在原来的基础上改的) MySQLi - 面向对象 MySQLi - 面向过程 PDO MySQLi 面向对象 < ...
- 多表连接的三种方式 HASH MERGE NESTED
多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP------------------------------------------------------20 ...
- 多表连接的三种方式详解 hash join、merge join、 nested loop
在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式.多表之间的连接有三种方式:Nested Loops,Hash Join 和 Sort Merge Join.具体适用哪 ...
- Python - Django - ORM 多对多表结构的三种方式
多对多的三种方式: ORM 自动创建第三张表 自己创建第三张表, 利用外键分别关联作者和书,关联查询比较麻烦,因为没办法使用 ORM 提供的便利方法 自己创建第三张表,使用 ORM 的 ManyToM ...
- 示例讲解PostgreSQL表分区的三种方式
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...
- Java反射机制(创建Class对象的三种方式)
1:了解什么是反射机制? 在通常情况下,如果有一个类,可以通过类创建对象:但是反射就是要求通过一个对象找到一个类的名称: 2:在反射操作中,握住一个核心概念: 一切操作都将使用Object完成,类 ...
- [转]javascript指定事件处理程序包括三种方式:
javascript指定事件处理程序包括三种方式: (1):DOM0级事件处理程序 如: 代码如下: var btn=document.getElementById("mybtn" ...
- Java反射机制(创建Class对象的三种方式)
1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Fi ...
随机推荐
- WebAPI返回JSON的正确格式
最近打算用WebAPI做服务端接口,返回JSON供ANDROID程序调用,结果试了好几次JSONObject都无法解析返回的JSON字符串.看了一下服务端代码: public string Get() ...
- Android_listView_Listener
layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...
- linux云计算集群架构学习笔记:workstation 12.0 按装Red Hat Enterprise Linux 7(64位)
安装RHEL7.2 步骤: 1.安装虚拟机,按以下截图安装即可 步骤2: Ret hat 7.2 操作系统安装 rhel7因为许可报错解决
- jvm内存模型及分配参数
jvm内存模型 程序计数器:是一块很小的内存空间.当线程数量超过cpu数量时,线程之间根据时间片轮询抢夺cpu资源.每一个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令. java虚拟机 ...
- linux命令 --> pwd命令
关于 pwd 命名前面在cd命令中已经出现过啦!!不过还是简单的说一下吧! pwd命令简单的介绍: pwd - print name of current/working directory(这... ...
- MATLAB的循环结构
循环结构有两种基本形式:while 循环和for 循环.两者之间的最大不同在于代码的重复是如何控制的.在while 循环中,代码的重复的次数是不能确定的,只要满足用户定义的条件,重复就进行下去.相对地 ...
- 【并查集】PKU-1182 食物链
食物链 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不 ...
- 设置apt-get
1.配置apt-get源 cp /etc/apt/sources.list /etc/apt/sources.listbak #备份原有配置文件 nano /etc/apt/sources.list ...
- 使用jQuery获取Bootstrap Switch的值
$('#switcher').bootstrapSwitch('state'); // true || false $('#switcher').bootstrapSwitch('toggleStat ...
- List中的get(i)
List中的get(i)方法是获取List中的第i个对象吗 是第i+1个对象.List是从0开始的 List是有序的可重复的集合接口