La concatenazione di stringhe non sembra funzionare in C #
-
21-09-2019 - |
Domanda
Non so che cosa è sbagliato con la seguente stringa:
"Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")"
Non riesco a ottenere la stringa concatenata. Io sono sempre Report(29-Dec-2009
. Questo è tutto e
il resto viene lasciato fuori dalla stringa.
Qual è il motivo?
Soluzione
Prova questo:
string filename =
String.Format(
"Report({0:dd-MMM-yyyy} to {1:dd-MMM-yyyy})",
System.DateTime.Now, System.DateTime.Now.AddMonths(-1));
Modifica Dal momento che nel Download avete ottenuto il vostro nome di file rotto nel primo spazio bianco, si potrebbe provare uno di questi:
filename = HttpUtility.UrlEncode(filename); // OR
filename = """" + filename + """";
Sembra alcuni browser non lo fa maniglie spazi bianchi molto bene: nomi di file con spazi vengono troncati al momento del download . Si prega di verificare che è possibile scaricare altri nomi di file con spazi in altri siti.
Altri suggerimenti
È necessario assegnare a qualcosa:
string s = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")"
Aggiornamento: Ho appena visto l'aggiornamento alla domanda. Come stai visualizzando la stringa? Sto indovinando che si sta visualizzando in una GUI e l'etichetta è troppo breve per visualizzare il testo completo.
Prova questo:
string newstring =
string.Format(
"Report ({0} to {1})",
System.DateTime.Now.ToString("dd-MMM-yyyy"),
System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy")
);
Che cosa stai assegnando il risultato? Sarebbe più facile da leggere il codice se si è utilizzato string.Format
Non sta assegnando il risultato concatenato a nulla, quindi non può essere utilizzato:
string myConcatenated = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + ")";
Utilizzando questo codice ...
string test = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " +
System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")";
ho visto il seguente risultato.
Report(29-Dec-2009 to 29-Nov-2009)
E 'possibile che la stringa viene troncata in seguito. Assicurarsi che si imposta un punto di interruzione a destra dopo questo codice viene eseguito e controllare il valore della variabile a cui è assegnato (test nel mio caso).
Se, come nel tuo domanda precedente , si utilizza questo valore per creare un file, è possibile che sia lo spazio prima "a" che sta causando il problema. Prova ad utilizzare:
"Report("
+ System.DateTime.Now.ToString("dd-MMM-yyyy")
+ "To"
+ System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy")
+ ")"
, invece, e vedere se questo risolve esso.
Se questo fa risolvere il problema, avrete probabilmente bisogno di uno capire come citare l'intero nome del file così non è trattato come il tre argomenti separati, "Report(29-Dec-2009"
, "to"
e "29-Nov-2009)"
. O semplicemente lasciare i vostri nomi rapporti senza spazi.
sceglierei quest'ultima, ma poi sono fondamentalmente contrari agli spazi nei nomi dei file - fanno semplici script in modo molto più difficile da scrivere: -)