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#表驱动法+一点反射实现“得到指定位数随机不重复字符串”三种方式的封装的更多相关文章

  1. js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式

    js replace 全局替换   js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...

  2. PHP连接数据库、创建数据库、创建表的三种方式

    这篇博客主要介绍了三种方式来连接MySQL数据库以及创建数据库.创建表.(代码是我在原来的基础上改的) MySQLi - 面向对象 MySQLi - 面向过程 PDO MySQLi 面向对象 < ...

  3. 多表连接的三种方式 HASH MERGE NESTED

    多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP------------------------------------------------------20 ...

  4. 多表连接的三种方式详解 hash join、merge join、 nested loop

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式.多表之间的连接有三种方式:Nested Loops,Hash Join 和 Sort Merge Join.具体适用哪 ...

  5. Python - Django - ORM 多对多表结构的三种方式

    多对多的三种方式: ORM 自动创建第三张表 自己创建第三张表, 利用外键分别关联作者和书,关联查询比较麻烦,因为没办法使用 ORM 提供的便利方法 自己创建第三张表,使用 ORM 的 ManyToM ...

  6. 示例讲解PostgreSQL表分区的三种方式

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...

  7. Java反射机制(创建Class对象的三种方式)

    1:了解什么是反射机制? 在通常情况下,如果有一个类,可以通过类创建对象:但是反射就是要求通过一个对象找到一个类的名称:   2:在反射操作中,握住一个核心概念: 一切操作都将使用Object完成,类 ...

  8. [转]javascript指定事件处理程序包括三种方式:

    javascript指定事件处理程序包括三种方式: (1):DOM0级事件处理程序 如: 代码如下: var btn=document.getElementById("mybtn" ...

  9. Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Fi ...

随机推荐

  1. 四、IP地址转换

    IP地址与端口 TCP/IP(传输控制协议/网际协议)不是一个协议,而是一组协议的总称,包括IP.TCP.UDP.ICMP.ARP等.它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据 ...

  2. ClientKey实现登录QQ空间,并设置背景音乐

    ClientKey大家都知道的,通过webbrowser登录后取得Cookie并计算出GTK,即可操作空间的POST. 源代码中引用了苏飞的Http类库,自己修改添加了一些拓展方法. 下载地址:htt ...

  3. Java基础知识强化之IO流笔记65:序列化流 和 反序列化流

    1. 什么是 序列化 和 反序列化 ?     序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程.比如转化为二进制.xml.json等的过程. 在序列化期间,对 ...

  4. IPC:shared memory

    #include <stdio.h> #include <sys/shm.h> #include <sys/stat.h> int main () { int se ...

  5. 我的开发框架(WinForm)

    近来,看园子里,好多同学,展示自己工作中的开发框架,有的功能强大,有的短小精悍,我也来凑个热闹,望各位大侠指点一二. 一.指导思想 1.尽量减少程序员对数据库的依赖,或者说尽力少的写sql 语句.根据 ...

  6. tomcat服务器使用简介

    tomcat服务器的应用与部署:1:下载tomcat服务器可以到http://tomcat.apache.org/下载apache服务器,左侧有各种版本的服务器,可以根据自己的需要下载,如果是是Lin ...

  7. 简单理解前端web开发的MVC模式

    随着前端Ajax兴起.前端开发工作进一步划分:js开发和ui页面制作.另外从整个前端项目的清晰明朗以可扩展性角度来看,MVC的应用也越来越必要,特别是对大的项目. 例如 需要给一个页面上的button ...

  8. LC-检索

    line void LC(tree T,float cost) { //为找一个答案结点检索T if(T是答案结点) {输出T:return:} E=T: //E-结点 将活结点表初始化为空: ) { ...

  9. jQuery图片无缝滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. h2database源码浅析:MVTable与MVIndex

    Database包含一个Store:MVTableEngine.Store getMvStore() MVTableEngine.Store可以获取各tables:java.util.HashMap& ...