Domanda

ho un po 'pezzo di codice (vedi sotto) che sta tornando la stringa:

string.Format("{0}----{1}",3,"test 2");

Quindi, come faccio ad avere questo in realtà "Execute"? Per eseguire e fare il formato / sostituzione di {0} e {1}?

Il mio Snippet di codice:

StringBuilder sb = new StringBuilder();
sb.Append("{0}----{1}\",");
sb.AppendFormat(ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));
string sbStr = "=string.Format(\""+sb.ToString()+");";

Sì, ReturnParamValue dà la realtà valore del DTO.

In ogni modo, ho preso uno sguardo al seguente (ma non dice come eseguirlo: Non Come arrivare String.Format di analizzare {0}

Forse, ho solo dovrebbe mettere il mio frammento di codice in un metodo. Ma, che cosa allora?

È stato utile?

Soluzione

Perché si includono String.Format nella stringa stessa?

Se siete alla ricerca di un generico "mi permetta di valutare questa espressione arbitraria ho costruito in una stringa", allora non c'è una risposta semplice.

Se, invece, si sta guardando come fornire i parametri alla stringa da una chiamata di funzione, allora hai te tutto torto e lavorando troppo.

provare qualcosa di simile, in base al codice originale:

string result
    = string.Format(
        "{0}----{1}",
        ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));

Anche se, questo non è del tutto funzionerà dal momento che il codice originale sembra essere solo fornendo un singolo valore, e si dispone di due valori nella tua stringa di formato - il {0} verrà sostituito con il valore da una funzione, e {1} lasciato invariato .

Cosa uscita si aspetta?

La vostra funzione ReturnParamValue() cercare di restituire sia l'etichetta e il valore in una singola stringa? Se lo fa, e se sono separati da virgola, allora si potrebbe provare questo:

var value = ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));
var pieces = string.Split(',');
string result
    = string.Format( "{0}----{1}", pieces[0], pieces[1]);

Anche se questo è seriamente lavorando troppo se ReturnParamValue() è un metodo che controlli.

Aggiorna ven 6 agosto

Controlla la dichiarazione per string.Format() come mostrato su MSDN :

public static string Format(
    string format,
    params Object[] args
)

A differenza della cassa speciale che potrebbe avere visto in C per printf(), non c'è niente di speciale o di insolito le maniglie modo string.Format() più parametri. La chiave è la params parola, che chiede al compilatore di fornire un po ' "zucchero sintattico" , dove si combina i parametri in un array per voi.

chiave qui è che l'involucro non accade se si sta già passando un singolo object[] - quindi se si volesse, si potrebbe fare qualcosa di simile:

object[] parameters 
    = ReturnParamValues(siDTO, "siDTO.SuggestionItemID,siDTO.Title");
string result
    = string.Format("{0}----{1}----{2}", parameters);

Anche se, se ho visto qualcosa di simile in qualsiasi codebase ho mantenuto, sarei trattandolo come un codice-odore e alla ricerca di un modo migliore per risolvere il problema.

solo perché è possibile non significa che di consigliabile . YMMV, naturalmente.

Altri suggerimenti

Non credo che si può eseguirlo. Java non è in realtà un linguaggio interpretato.

Si può fare uso di linguaggi di scripting (che può anche incorporare nella vostra applicazione Java che ne so, a partire da JDK6) a tale scopo, come Groovy

Si potrebbe utilizzare RegEx per analizzare i tre parametri fuori della stringa, e poi passare ad una vera e propria, attuale metodo string.Format: -)

Sembra che ciò che si vuole è qualcosa di simile:

string sbStr = string.Format("{0}----{1}", siDTO.SuggestionItemID, siDTO.Title);

Forse non ho capito la tua domanda completamente, ma suona come è necessario formattare un formato stringa. Se questo è vero si potrebbe forse provare qualcosa di simile:

int width = 5;
string format = String.Format("{{0,{0}}}----{{1,{0}}}", width);
string result = String.Format(format, "ab", "cd");

Quindi il trucco è semplicemente quello di sfuggire alla { o } utilizzando un doppio {{ o }}.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top