问题描述
先简单地描述一下吧。在一个工程里面有若干窗体和若干类,类是按照前缀+任意文字串的规则来决定的,前缀部分不会重复。在程序启动的时候,可以得到一个用户输入的字符串,如果工程内的某个窗体类的名称的前面部分和这个字符串相同的话,就显示这个窗体。现在我写了一段代码来实现查找窗体的功能,可是其中有两行不满意的地方,请问能不能把这两行注释为不满意的代码用一个函数来替换呢?或者不管代码给点其他的解决思路也行。代码如下。(简化了一下,并且删除了错误处理)DimgsAutoOpenFormIDAsString="TF9001"'假设用户想要打开[TF9001小实验]这个窗体DimAutoOpenFormTypeAsType=NothingIfgsAutoOpenFormID<>""ThenForEachtheTypeAsTypeInSystem.Reflection.Assembly.GetExecutingAssembly.GetTypes'不满意IftheType.Name.StartsWith(gsAutoOpenFormID,StringComparison.CurrentCultureIgnoreCase)Then'不满意IftheType.IsSubclassOf(GetType(Form))ThenAutoOpenFormType=theTypeExitForEndIfEndIfNextEndIfIfAutoOpenFormTypeIsNotNothingThenfMainForm=Activator.CreateInstance(AutoOpenFormType)EndIf
解决方案
解决方案二:
在线等待中。。。等到六点。
解决方案三:
用反射,但是运行效率会差一点
解决方案四:
你如果无法知道完整名称,就只能去遍历匹配,还能有什么办法.
解决方案五:
引用2楼xiaobingking的回复:
用反射,但是运行效率会差一点
是啊,现在的代码用的就是反射呢。
解决方案六:
引用3楼Z65443344的回复:
你如果无法知道完整名称,就只能去遍历匹配,还能有什么办法.
是的,不能保证是完整名称。要是能够改成像System.IO.Directory.GetFiles(path,searchPattern)那样,可以利用searchPattern就好了。
解决方案七:
所谓的search不过是已经封装好的,你写的也是个search的也是个,没啥本质区别,需要你把这个封装下然后复用,就是一回事。建议你弄好命名规则然后在用反射,再不行做个映射表,如果窗体就百来个,现在的方法也没啥太大的问题。
解决方案八:
什么是映射表啊,好高端的样子。。。