Ответ 1
Я всегда делаю так, чтобы аргументы указывались как пара "имя"/"значение", например
myprogram.exe -arg1 value1 -arg2 value2
Это означает, что когда вы анализируете командную строку, вы можете поместить пары аргумент/значение в Dictionary
с аргументом в качестве ключа. Тогда ваш arg("SetTime")
станет:
MessageBox.Show(dictionary["SetTime"]);
(Очевидно, вы не хотите, чтобы фактический словарь был общедоступным.)
Чтобы получить аргументы в первую очередь вы можете использовать:
string[] args = Environment.GetCommandLineArgs();
Это вернет все аргументы, поэтому вам нужно будет проанализировать массив с шагом два (после первой проверки, что длина кратна двум + 1):
Первым элементом массива является имя исполняемой программы - Страница MSDN - поэтому ваш цикл должен начинаться с одного:
for (int index = 1; index < args.Length; index += 2)
{
dictionary.Add(args[index], args[index+1]);
}
Это происходит в два этапа, когда вы определяете, что каждый аргумент представляет собой пару значений: идентификатор и само фактическое значение, например
my.exe -arg1 value1 -arg2 value2
Затем вы можете просто увидеть, указан ли аргумент, увидев, есть ли ключ -arg1
в словаре, а затем прочитать его значение:
string value;
if (dictionary.TryGetValue(arg, out value))
{
// Do what ever with the value
}
Это означает, что вы можете иметь аргументы в любом порядке и опустить любые аргументы, которые вы не хотите указывать.
Единственный недостаток этого метода - если у вас есть флаг типа -debug
(например), который может быть логически реализован с наличием или отсутствием флага, необходимо указать как -debug true
(или 1
или on
), но это упрощает вещи, если у вас есть флаги, которые требуют значений (например, пути к файлам конфигурации, строки подключения к базе данных и т.д.)