根据用户输入构建类

时间:2018-11-22 05:53:08

标签: c# winforms

我正在创建一种构建自动化的方法,该方法将允许用户通过自由形式的文本框输入命令,这些文本框具有类似于intellisense的自动完成的伪IDE功能。首先,我要定义相当于一个字符串列表的字符串,这些字符串充当定义模板,这些模板将用于从我的应用程序的用户收集参数。例如,示例模板如下所示:

var scriptTemplate = "show message '{v_Message}' and close after {v_AutoClose} seconds"

因此,以上是我的应用程序期望找到的已定义模式。我预计将遍历如下所示的文本框数据(快乐路径)

"show message 'hello world!' //textbox1.Text

"show message 'hello world' and close after 4 seconds" //textbox1.Text

因此,现在,我正在构建一种方法来获取用户的输入,将其与已知模板进行比较,选择一个模板,然后提取参数(在这种情况下,v_Message可能 v_AutoClose)并实例化一个类,该类将包含一些执行命令的逻辑:

var newClassInstance = new CustomMessage();
newClassInstance.v_Message = "hello world";
//newClass.v_AutoClose = 4;
newClassInstance.Execute();

我被困在需要提取已知参数并将其应用于类的部分,因为我不确定实现此目的的最佳方法。我能够使用前两个单词“ reserved”关键字来选择正确的模板,但是提取参数并将其应用于课程的最佳方法是什么?我正在尝试针对100种不同的潜在模板进行此操作。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的需求类型,其中我有两个表,其中一列描述了“ TitleOfCampus”,其中一个表是主数据,第二个是新数据(您的表单数据)。 我需要做的就是将新数据映射到主表(您的模板表)中的匹配数据。

我从新数据(TitleOfCampus)中获取每个条目,通过如下破坏TitleOfCampus中的字符串值来过滤主表,

  1. 基于完整字符串的实际过滤器,
  2. 基于String.Split(“”)数组关键字的过滤器

根据获得的结果,最后根据过滤器值TitleOfCampus的第一个字母对匹配的主表信息进行排序,因此最上面的数据是最适合映射的信息。示例代码如下

List<MyTemplate> templateDetails = new List<MyTemplate>
   //Your filter code
templateDetails.AddRange(actualFullStringMatchResults);
foreach(var item in searchKeyword.ToString().Split(" "))
 {
   //Your filter code
   templateDetails.AddRange(eachKeyWordMatchResults);
 }
 //Remove duplicate 
 templateDetails= templateDetails.DistinctBy(x => x.TempalteID).ToList();
 //Set topmost value as most releavant one
 templateDetails.OrderByDescending(i => i.TitleOfCampus[0] == fullStringFilter[0]).ToList();

我希望这个概念能解决您的要求。在规定的时间内自动关闭模板不是重点,但显示正确的模板很重要。