Конкатенация строк, похоже, не работает в C#

StackOverflow https://stackoverflow.com/questions/1974400

  •  21-09-2019
  •  | 
  •  

Вопрос

Я не знаю, что не так со следующей строкой:

"Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + "  to  " + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") +  ")"

Я не могу получить объединенную строку.Я получаю Report(29-Dec-2009.Вот и все, и остальное исключается из строки.

В чем же причина?

Это было полезно?

Решение

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

string filename = 
    String.Format(
        "Report({0:dd-MMM-yyyy} to {1:dd-MMM-yyyy})",
         System.DateTime.Now, System.DateTime.Now.AddMonths(-1));

Редактировать: Поскольку в вашем окно загрузки у вас получилось, что ваше имя файла разбито на первый пробел, вы могли бы попробовать ОДИН из этих:

filename = HttpUtility.UrlEncode(filename); // OR
filename = """" + filename + """";

Похоже, некоторые браузеры не очень хорошо обрабатывают пробелы: Имена файлов с пробелами усекаются при загрузке.Пожалуйста, проверьте это, вы можете загружать другие имена файлов с пробелами на других сайтах.

Другие советы

Вам нужно присвоить это чему-то:

string s = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")"

Обновить:Я только что увидел ваше обновление по этому вопросу.Как вы отображаете строку?Я предполагаю, что вы отображаете его в графическом интерфейсе, а надпись слишком короткая, чтобы отобразить полный текст.

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

string newstring = 
  string.Format(
                "Report ({0} to {1})", 
                System.DateTime.Now.ToString("dd-MMM-yyyy"), 
                System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy")
               );

Чему вы присваиваете результат?Было бы проще читать код, если бы вы использовали string.Формат

Вы ничему не присваиваете объединенный результат, поэтому не можете его использовать:

string myConcatenated = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + ")";

Используя этот код...

string test = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " +
                   System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")";

Я увидел следующий результат.

Report(29-Dec-2009 to 29-Nov-2009)

Возможно, позже строка будет усечена.Убедитесь, что вы установили точку останова сразу после запуска этого кода и проверяете значение переменной, которой она присвоена (test в моем случае).

Если, как в вашем предыдущий вопрос, Если вы используете это значение для создания файла, возможно, проблема в пробеле перед "to".Попробуйте использовать:

"Report("
    + System.DateTime.Now.ToString("dd-MMM-yyyy")
    + "To"
    + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy")
    +  ")"

вместо этого и посмотрите, исправит ли это проблему.

Если это делает исправьте это, вам, вероятно, нужно будет либо выяснить, как заключить в кавычки все имя файла, чтобы оно не рассматривалось как три отдельных аргумента, "Report(29-Dec-2009", "to" и "29-Nov-2009)".Или просто оставьте названия ваших отчетов без пробелов.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top