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 ...
随机推荐
- 可视化swing界面编辑--转载
原文地址:http://279234058.iteye.com/blog/2200122 今天发现了一个WindowBuilder插件,功能好强大,啊哈哈,从此告别手动编辑swing界面代码,直接像V ...
- 结合 category 工作原理分析 OC2.0 中的 runtime
绝大多数 iOS 开发者在学习 runtime 时都阅读过 runtime.h 文件中的这段代码: struct objc_class { Class isa OBJC_ISA_AVAILABILI ...
- Android 框架修炼-自己封装双缓存管理框架库
一.概述 Android开发中,网络请求是很重要的一部分,而缓存网络请求来的图片或者响应结果字符串或者结果流,既可以省流量,同时也可以帮助我们 解决无网或弱网情况下加载情况,当然也可以提升程序性能效率 ...
- Android 换肤功能的实现(Apk插件方式)
一.概述 由于Android 没有提供一套统一的换肤机制,我猜可能是因为国外更注重功能和体验的原因 所以国内如果要做一个漂亮的换肤方案,需要自己去实现. 目前换肤的方法大概有三种方案: (1)把皮肤资 ...
- Java基础知识强化之网络编程笔记20:Android网络通信之 Android常用OAuth登录和分享
1. 申请百度开发者账号及百度OAuth简介. (1)申请开发者账号: http://developer.baidu.com/ (2)创建项目: http://developer.baidu.com ...
- mfc非模态对话框
按照我们的之前的做法,先新建工程. 把基本的内容都添加上. 形成这样一个样子: 并且进行试运行,让程序能够完成加法运算. 值的注意的是,静态文本那里要改一下名字,否则无法将成员变量进行添加. 前期准备 ...
- [转]ORACLE 异常错误处理
本文转自:http://www.cnblogs.com/soundcode/archive/2012/01/10/2318385.html 本篇主要内容如下: 5.1 异常处理概念 5.1.1 预定义 ...
- 关于Eclipse插件开发(五)-----编辑器类方法的使用说明
上面有讲ChinaEditor类继承EditorPart抽象类时,只实现了init,createPartControl两个方法,本节将逐步讲解其他的5个方法的用法. EditorPart方法的执行情况 ...
- Microsoft Visual Studio 2013 Update 1 离线安装程序
☆ 微软官网地址:☆http://www.microsoft.com/zh-cn/download/details.aspx?id=41650☆ 离线安装程序 直接下载链接:☆http://downl ...
- ASP.NET伪静态-无法读取配置文件,因为它超过了最大文件大小的解决办法
一直都在使用微软URLRewriter,具体的使用方法我就不多说了,网上文章很多. 但最近遇到一个问题,就是当web.config文件里面设置伪静态规则过多,大于2M的时候,就报错:无法读取配置文件, ...