Данный код работает как нужно по задаче, вот только дерево if будет слишком большим, что можно переделать, чтобы не нагружать проверкой сотен if? По задаче: (приложение Windows Form - C#) когда в командной строке cmd обращаемся к приложению через команду /h выполняется команда 1, когда обращаемся с командами /h /s /e выполняется команда 1 2 3, при этом приложение не должно отображаться. Только при клике по приложению должна загружаться форма.
Код в Program.cs
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var form = new Form1();
if (args.Contains("/h"))
{
form.Check1();
}
if (args.Contains("/s"))
{
form.Check2();
}
if (args.Contains("/e"))
{
form.Check3();
}
else if (args.Contains("/h") == false && (args.Contains("/s")) == false && (args.Contains("/e") == false))
{
Application.Run(new Form1());
}
}
Каждый вызов contains
совершает проход по массиву, полагаю лучше сделать один вручную.
Можно завести булевую переменную, которая при необходимости запретит запуск приложения.
var form = new Form1();
bool needRun = true;
foreach (string arg in args) {
switch (arg) {
case "/h":
form.Check1();
needRun = false;
break;
case "/s":
form.Check2();
needRun = false;
break;
...
}
}
if (needRun)
{
Application.Run(form);
}
В случае, если при запуске в GUI не планируется вообще никаких параметров, можно просто проверить их отсутствие:
if (args.Length == 0)
Application.Run(form);
args.Contains("/h") == false
проверяет, что в массиве аргументов командной строки не было передано "/h".
Могу только подсказать в каком направлении двигаться. Вообще любые деревья if-условий нужно менять на ассоциативные массивы (массивы пар ключ-значение). В качестве ключа у тебя string из args.Contains(), в качестве значения либо отдельные объекты, которые вызывают FormCheck(). Либо разные экземпляры одного класса, с разными параметрами. В зависимости от того, насколько не однотипные команды.
Получается что-то типа:
//объекты, вставляемые в "значения"
interface Command {
public void Run(Form1 form);
}
public class Command1 implements Command {
public void Run(Form1 form){
form.FormCheck1();
}
}
public class Command2 implements Command {
public void Run(Form1 form){
form.FormCheck2();
}
}
//это ассоциативный массив
Dictionary<string, Command> commands = new Dictionary<string, Command>();
//таким образом вбиваются пары ключ-значение
commands.Add("/h", new Command1());
commands.Add("/s", new Command2());
//или объекты одного класса с разными параметрами
var form = new Form1();
bool needRun = true;
//далее упрощаем все дерево условий в одну строку
foreach (string arg in args) {
if (commands.ContainsKey(arg)) {
commands[arg].Run(form);
needRun = false;
}
}
if (needRun) {
Application.Run(form);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите пожалуйста, как это можно осуществить(скрипт)Мне нужно что-бы камера в unity перемещалась на определенные координаты по осям x и y (например...
Есть свойство cnt, как я могу скрыть элемент когда cnt > 5?
Подскажите как сделать удаление выделенного элемента из TreeView? (находящегося не на самом верхнем уровне)