Pregunta

Tengo un pequeño trozo de código (véase más adelante) que está devolviendo la cadena:

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

Entonces, ¿cómo puedo obtener esta realidad a "Ejecutar"? Para ejecutar y hacer el formato / sustitución de {0} y {1}?

Mi Fragmento de código:

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

Sí, ReturnParamValue da la realidad valor de la DTO.

De todas formas, he echado un vistazo a la siguiente (pero no dice cómo ejecutarlo: Como llegar String.Format no para analizar {0}

Tal vez, sólo debería poner mi fragmento de código en un método. Pero, ¿qué?

¿Fue útil?

Solución

¿Por qué está usted, incluyendo String.Format en la propia cadena?

Si usted está buscando un genérico "déjame evaluar esta expresión arbitraria que he construido en una cadena", entonces no hay una respuesta simple.

Si, en cambio, que está viendo cómo proporcionar a los parámetros de la cadena de una llamada a la función, a continuación, usted se tiene todo torcido y trabajando muy duro.

intentar algo como esto, en base a su código original:

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

Sin embargo, esto no va a funcionar en su totalidad ya que su código original parece ser sólo proporciona un valor único, y tiene dos valores en su cadena de formato - la {0} será reemplazado por el valor de su función, y deja sin cambios {1} .

¿Qué salida son sus expectativas?

¿Su función ReturnParamValue() tratar de devolver la etiqueta y el valor en una sola cadena? Si lo hace, y si son separados por comas, entonces usted podría intentar esto:

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

A pesar de esto está funcionando en serio demasiado duro si ReturnParamValue() es un método que controles.

Actualizar vie 6 de agosto de

Salida de la declaración de string.Format() como se muestra en MSDN :

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

A diferencia de la carcasa especial que podría haber visto en C para printf(), no hay nada especial o inusual sobre las asas manera string.Format() múltiples parámetros. La clave es la params palabra clave, que pide el compilador para proporcionar una poco "azúcar sintáctico" en la que combina los parámetros en una matriz para usted.

La clave aquí es que el envoltorio no sucede si ya estás pasando un solo object[] - por lo que si quisiera, podría hacer algo como esto:

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

Sin embargo, si vi algo como esto en ninguna base de código mantuve, estaría tratando como un código de olor y en busca de una mejor manera de resolver el problema.

El hecho de que de posible no significa que sea de aconsejable . Tu caso es distinto, por supuesto.

Otros consejos

No creo que se puede ejecutar. Java no es realmente un lenguaje interpretado.

Se puede hacer uso de lenguajes de script (que puede incluso integrar en su aplicación Java que sé, empezar desde JDK6) para tal fin, como Groovy

Se podría utilizar expresiones regulares para analizar los tres parámetros de la cadena, y luego se pasa a un verdadero, el método string.Format real: -)

Parece que lo que quiere es algo como esto:

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

Tal vez yo no entendía su pregunta por completo, pero suena como que necesita para dar formato a un formato de cadena. Si eso es cierto que tal vez podría intentar algo como esto:

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

Así que el truco es simplemente para escapar de la { o } mediante el uso de un doble {{ o }}.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top