Вывести все параметры командной строки - PullRequest
3 голосов
/ 03 февраля 2011

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

static void Main(string[] args)
{
    string Params = string.Empty;
    foreach(string arg in args)
    {
       Params += arg + ",";
    }
}

Есть ли лучший способ сделать это?

Ответы [ 6 ]

6 голосов
/ 03 февраля 2011

Как насчет

Params = string.Join(",", args);

Ваш foreach подход не очень эффективен.Поскольку строка является неизменной , это означает, что для каждой итерации цикла строка будет выбрасываться для сборки мусора, и будет генерироваться новая строка.В случае string.Join будет сгенерирована только одна строка.

Внутри цикла, чтобы обойти ту же производительность, вам придется использовать StringBuilder, но в этом случае на самом деле нет причин неиспользовать string.Join, так как код будет намного более читабельным.

2 голосов
/ 03 февраля 2011

Вы можете использовать этот кусок кода

String.Join(", ", Environment.GetCommandLineArgs())
2 голосов
/ 03 февраля 2011

Вы можете использовать String.Join (",", args)

1 голос
/ 28 августа 2013

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

Используя пример: Foo.exe an example "is \"fine\", too" okay

Простые предложения по объединению приведут к: an, example, is "fine", too, okay. Неплохо, но не очень ясно и несколько вводит в заблуждение.

Вот то, что я бросил вместе, и это работает достаточно хорошо для меня. Я уверен, что это может быть улучшено в дальнейшем.

String.Join(", ", (from a in args select '"' + a.Replace("\"", @"\""") + '"'));

Возвращает строку: "an", "example", "is \"fine\", too", "okay". Я думаю, что это лучше справляется с указанием фактических параметров.

0 голосов
/ 03 февраля 2011

Вы должны использовать:

string.Join(",", args);

Строго говоря, функция Join создает StringBuilder с емкостью строк. Длина * 16 (это 16 - фиксированное число). Если у вас разные аргументы, максимальный размер и производительность важна для вас, используйте StringBuilder с определенной емкостью.

0 голосов
/ 03 февраля 2011
String params = String.Join(",", args);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...