110,533
社区成员
发帖
与我相关
我的任务
分享
//先定义一个RegexCompilationInfo数组,包含了正则表达式,表达式的匹配模式,表达式名称(实际就是生成的函数名),最后一个参数相当的废物哇,居然是否公开,不公开咋用啊,虽然反射无所谓的。
RegexCompilationInfo[] rcis =
{
new RegexCompilationInfo(@"^\d+$", RegexOptions.None, "Integer", "MyRegex", true),
new RegexCompilationInfo(@"^(?!0\d.+$)\d+(\.\d+)?$", RegexOptions.None, "Number", "MyRegex", true)
};
//随便定一个名字把,这个名字就是你的命名空间名字,也是你最终生成的dll文件名
AssemblyName name = new AssemblyName("MyRegex");
//妥了,用上面2个变量可以编译了。
Regex.CompileToAssembly(rcis, name);//er...就这么简单,实际上到这里,就结束了,下面是调用方法
//反射调用把,避免添加引用无法文字描述影响大家理解
//装载这个刚生成的dll
Assembly assembly = Assembly.LoadFrom(name.Name+".dll");
//我们既然是演示,就用定死的名字好了。
Type t = assembly.GetType("MyRegex.Number");
//动态创建一个实例
object obj = Activator.CreateInstance(t);
//注意这一句,汗一个,直接类型转换成Regex是可以的说明动态创建了2个类,都继承自Regex
Regex regExp = obj as Regex;
//接下来容易了,既然能转换成Regex,就直接当Regex对象来用了。
MessageBox.Show(regExp.IsMatch("123").ToString());