Pergunta

Eu tenho um pequeno pedaço de código (veja abaixo) que está retornando a string:

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

Então, como faço para que isso realmente "execute"? Para executar e fazer o formato/substituição de {0} e {1}?

Meu snippet 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()+");";

Sim, o ReturnParamValue fornece o valor realmente do DTO.

De qualquer forma, dei uma olhada no seguinte (mas não diz como executá -lo:Como obter string.format para não analisar {0}

Talvez eu deva colocar meu snippet de código em um método. Mas o que então?

Foi útil?

Solução

Por que você está incluindo String.Format na própria string?

Se você está procurando uma genérica "Deixe -me avaliar essa expressão arbitrária que eu criei em uma string", não há uma resposta simples.

Se, em vez disso, você está analisando como fornecer os parâmetros à string a partir de uma chamada de função, você se distorcia e trabalhando demais.

Tente algo assim, com base no seu código original:

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

No entanto, isso não funcionará totalmente, pois seu código original parece estar apenas fornecendo um único valor, e você tem dois valores em sua sequência de formato - o {0} será substituído pelo valor da sua função e {1} deixado inalterado.

Que saída você está esperando?

Faz o seu ReturnParamValue() Função Tente retornar o rótulo e o valor em uma única string? Se isso acontecer, e se eles forem separados por vírgula, você poderá tentar o seguinte:

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

Embora isso esteja seriamente funcionando muito se ReturnParamValue() é um método que você controla.

Atualizar sexto de 6 de agosto

Confira a declaração para string.Format() como mostrado no msdn:

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

Ao contrário do invólucro especial que você pode ter visto em C por printf(), não há nada de especial ou incomum no caminho string.Format() lida com vários parâmetros. A chave é o params palavra -chave, que pede ao compilador que forneça um pouco "açúcar sintático" onde combina os parâmetros em uma matriz para você.

A chave aqui é que o embrulho não acontece se você já está passando um único object[] - Então, se você quisesse, você poderia fazer algo assim:

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

No entanto, se eu visse algo assim em qualquer base de código que eu mantivesse, estaria tratando-a como uma fleração de código e procurando uma maneira melhor de resolver o problema.

Só porque é possível não significa que é aconselhável. YMMV, é claro.

Outras dicas

Eu não acho que você pode executá -lo. Java não é realmente uma linguagem interpretada.

Você pode fazer uso de linguagens de script (que podem até incorporar seu aplicativo Java como eu sei, comece do JDK6) para esse propósito, como Groovy

Você pode usar o Regex para analisar os três parâmetros da string e depois passá-los para um método real e real de string.format :-)

Parece que o que você quer é algo assim:

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

Talvez eu não tenha entendido completamente sua pergunta, mas parece que você precisa formatar uma corda de formato. Se isso for verdade, você talvez possa tentar algo assim:

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

Portanto, o truque é simplesmente escapar do { ou } usando um duplo {{ ou }}.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top