Question

J'ai un petit morceau de code (voir ci-dessous) qui retourne la chaîne:

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

Alors, comment puis-je obtenir cela en fait « Exécuter »? Pour exécuter et faire le format / remplacement de {0} et {1}?

Mon code extrait:

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

oui, ReturnParamValue donne la valeur réellement de la DTO.

Quoi qu'il en soit, j'ai examiné à l'adresse suivante (mais il ne dit pas comment l'exécuter: Comment obtenir String.Format ne pas analyser {0}

Peut-être, je ne devrais mettre mon extrait de code dans une méthode. Mais, qu'est-ce donc?

Était-ce utile?

La solution

Pourquoi êtes-vous incluez String.Format dans la chaîne elle-même?

Si vous êtes à la recherche d'un générique « me permettre d'évaluer cette expression arbitraire que j'ai construit dans une chaîne » alors il n'y a pas de réponse simple.

Si, au contraire, vous êtes à la recherche sur la façon de fournir les paramètres à la chaîne à partir d'un appel de fonction, vous avez vous-même tous les tordus et travailler trop dur.

Essayez quelque chose comme ça, en fonction de votre code d'origine:

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

Bien, cela ne fonctionnera pas entièrement puisque votre code d'origine semble être seulement de fournir une valeur unique, et vous avez deux valeurs dans votre chaîne de format - la {0} sera remplacée par la valeur de votre fonction, et {1} gauche inchangé .

Qu'est-ce que vous attendez la sortie?

Votre fonction ReturnParamValue() essayer de retourner l'étiquette et la valeur dans une seule chaîne? Dans le cas contraire, et si elles sont séparées par des virgules, vous pourriez essayer ceci:

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

Bien que cela travaille sérieusement trop dur si ReturnParamValue() est une méthode que vous contrôlez.

Mise à jour ven 6 Août

Consultez la déclaration de string.Format() comme indiqué sur MSDN :

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

Contrairement au boîtier spécial que vous pourriez avoir vu en C pour printf(), il n'y a rien de spécial ou inhabituel au sujet de la façon string.Format() gère plusieurs paramètres. La clé est params mot-clé, qui demande au compilateur de fournir un peu « sucre syntaxique » où il combine les paramètres dans un tableau pour vous.

est ici que l'emballage ne se produit pas si vous êtes déjà passer un object[] - donc si vous vouliez, vous pourriez faire quelque chose comme ceci:

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

Bien que, si je voyais quelque chose comme ça dans une base de code que je soutenais, je serais traitais comme une odeur de code et la recherche d'une meilleure façon de résoudre le problème.

Juste parce qu'il est possible ne signifie pas qu'il est conseillé . YMMV, bien sûr.

Autres conseils

Je ne pense pas que vous pouvez l'exécuter. Java est pas vraiment un langage interprété.

Vous pouvez utiliser des langages de script (qui peut même intégrer dans votre application Java comme je sais, commencer par JDK6) à cette fin, comme Groovy

Vous pouvez utiliser RegEx pour analyser les trois paramètres de la chaîne, et de les transmettre ensuite à une véritable méthode de string.Format réelle: -)

Il ressemble à ce que vous voulez est quelque chose comme ceci:

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

Peut-être que je ne comprends pas votre question tout à fait, mais il semble que vous devez formater une chaîne de format. Si cela est vrai, vous pouvez peut-être essayer quelque chose comme ceci:

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

Donc, l'astuce est tout simplement pour échapper à la { ou } en utilisant un double {{ ou }}.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top