Как конвертировать все в одну строку? - PullRequest
1 голос
/ 02 мая 2011

Мне нужно преобразовать эту строку в одну строку, потому что мой метод "DisplayMessage" принимает только 1 аргумент, так как я могу это сделать?

_userOptions.DisplayMessage("\nFile Generated: " +
     BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)) + 
     "\nTime Elapsed:  {0} minute(s) {1} second(s)",
     timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds / 10 + "\n");

Ответы [ 9 ]

3 голосов
/ 02 мая 2011

Похоже, ваш метод DisplayMessage не допускает формат строки. Попробуйте поместить весь этот контент (все, что в круглых скобках DisplayMessage) в метод String.Format(). Это сделает его одной строкой и в то же время учитывает множество передаваемых вами параметров.

1 голос
/ 02 мая 2011

Я думаю, вы можете использовать StringBuilder

StringBuilder sb = new StringBuilder();
        sb.Append("\n");
        sb.Append("File Generated: ");
        sb.Append(BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)));
        sb.Append("\n");
        sb.Append("Time Elapsed: ");
        sb.Append(timeSpan.Minutes);
        sb.Append(" minute(s)");
        sb.Append(timeSpan.Seconds);
        sb.Append(" second(s)");
        sb.Append();
        _userOptions.DisplayMessage(sb.ToString());

но я думаю, у вас есть ошибка: у вас есть 2 параметра, но на самом деле это 3

1 голос
/ 02 мая 2011

Это более элегантно, на мой взгляд:

string message = string.Format("{0}File Generated: {1}{0}Time Elapsed:  {2} minute(s) {3} second(s) {4} milliseconds{0}", 
    "\n", BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)), timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds / 10);
_userOptions.DisplayMessage(message);

При использовании Format нет необходимости использовать оператор + для строк.

1 голос
/ 02 мая 2011

В вашей строке указано, что вы хотите вызвать static Format метод для String class , например, так:

_userOptions.DisplayMessage(string.Format(
    "\nFile Generated: {0}\nTime Elapsed:  {1} minute(s) {2} second(s)\n",
    BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)),
    timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds / 10));

Однако это вызовет проблемы., поскольку у вас больше параметров, чем заполнителей в строке.

Кроме того, приведены комментарии относительно использования "\ n" в качестве разделителя новой строки, если только у вас нет особой необходимости в этом конкретном формате (ине похоже, что вы это делаете, вы не указываете, что пишете в файл или куда-то, куда данные направляются во внешнюю систему), лучше использовать Environment.NewLine, который выможно использовать так (обратите внимание, это по-прежнему не учитывает тот факт, что у вас больше параметров, чем у вас заполнителей:

_userOptions.DisplayMessage(string.Format(
    "{0}File Generated: {1}{0}Time Elapsed:  {2} minute(s) {3} second(s){0}",
    Environment.NewLine,
    BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)),
    timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds / 10));
1 голос
/ 02 мая 2011

Полагаю, вы хотите использовать String.Format.Это берет строку и заменяет {#} на индекс аргумента.

Пример:

String.Format("Hi {0}, welcome to Stack Overflow!", "ale");

Возможно, вы захотите взглянуть на How should I concatenate strings?

1 голос
/ 02 мая 2011
var msg = String.Format("\nFile Generated: {0}\nTime Elapsed: {1} minute(s) {2} second(s)\n", BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)), timeSpan.Minutes, timeSpan.Seconds);

_userOptions.DisplayMessage(msg);

Это должно сделать это ...

1 голос
/ 02 мая 2011

Попробуйте это:

string s= String.Format(
    "\nFile Generated: " +
    BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)) + 
    "\nTime Elapsed:  {0} minute(s) {1} second(s) {2} msec(s)\n",
    timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds / 10);
_userOptions.DisplayMessage(s);
0 голосов
/ 02 мая 2011

Вместо {0} и {1} просто используйте ваши аргументы напрямую:

_userOptions.DisplayMessage("\n" + "File Generated: " + BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)) + "\n" + "Time Elapsed:" + timeSpan.Minutes + "minute(s)" + timeSpan.Seconds + "second(s)" + timeSpan.Milliseconds / 10 + "\n");
0 голосов
/ 02 мая 2011

Найдите ниже.

string str = String.Format("\n" + "File Generated: " + BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)) + "\n" + "Time Elapsed: " + " {0} minute(s)" + " {1} second(s)", timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds / 10 + "\n");

_userOptions.DiplayMessage(str);

Надеюсь, это поможет.

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