Создание классов на основе пользовательского ввода - PullRequest
0 голосов
/ 22 ноября 2018

Я создаю способ построения автоматизации, который позволит пользователям вводить команды через текстовые поля произвольной формы с автозаполнением, своего рода псевдо-IDE-функциональностью, аналогичной intellisense.Для начала я определяю, что составляет список строк, которые действуют как шаблоны определений, которые будут использоваться для сбора параметров от пользователей моего приложения.Например, пример шаблона выглядит следующим образом:

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();

Я застрял в той части, где мне нужно вытащить известные параметры и применить их к классу, так как я не уверен, что это лучший способ сделать это.Мне удалось сделать первые 2 слова «зарезервированными» ключевыми словами, чтобы выбрать правильный шаблон, но каков наилучший способ извлечь параметры и применить их обратно к классу?Я пытаюсь сделать это в общем для 100 различных потенциальных шаблонов.

1 Ответ

0 голосов
/ 22 ноября 2018

Я столкнулся с аналогичным типом требований, где у меня есть две таблицы со столбцом, описывающим «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();

Я надеюсь, что эта концепция поможет вам удовлетворить ваши требования.Шаблон автоматического закрытия в указанное время не является важным моментом, но показ правильного шаблона важен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...