Как получить строку с String.Format для выполнения? - PullRequest
0 голосов
/ 05 августа 2010

У меня есть небольшой кусок кода (см. Ниже), который возвращает строку:

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

так, как мне заставить это фактически "Выполнить"? Запустить и выполнить форматирование / замену {0} и {1}?

Фрагмент моего кода:

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

да, ReturnParamValue дает фактическое значение DTO.

В любом случае, я посмотрел на следующее (но там не сказано, как его выполнить: Как заставить String.Format не анализировать {0}

Может быть, я просто должен поместить свой фрагмент кода в метод. Но что тогда?

Ответы [ 5 ]

1 голос
/ 05 августа 2010

Почему вы включаете String.Format в саму строку?

Если вы ищете обобщенное «позвольте мне оценить это произвольное выражение, которое я построил в строке», тогда простого ответа нет.

Если вместо этого вы смотрите, как передать параметры в строку из вызова функции, то вы все перепутали и слишком усердно работаете.

Попробуйте что-то вроде этого, основываясь на вашем оригинальном коде:

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

Хотя это не будет полностью работать, поскольку ваш исходный код, по-видимому, предоставляет только одно значение, и в строке формата у вас есть два значения - {0} будет заменено значением из вашей функции, а {1} оставить без изменений.

Какой выход вы ожидаете?

Ваша функция ReturnParamValue() пытается вернуть и метку, и значение в одной строке? Если это так, и если они разделены запятыми, то вы можете попробовать это:

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

Хотя это серьезно работает слишком усердно, если ReturnParamValue() - это метод, которым вы управляете.

Обновление пт 6 августа

Проверьте декларацию для string.Format() , как показано на MSDN :

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

В отличие от специального кожуха, который вы могли видеть в C для printf(), нет ничего особенного или необычного в том, как string.Format() обрабатывает несколько параметров. Ключом является ключевое слово params , которое просит компилятор предоставить небольшой "синтаксический сахар" , где он объединяет параметры в массив для вас.

Ключевым моментом здесь является то, что перенос не произойдет, если вы уже передаете один object[] - поэтому, если вы хотите, вы можете сделать что-то вроде этого:

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

Хотя, если бы я увидел что-то подобное в любой кодовой базе, которую я поддерживал, я бы воспринимал это как запах кода и искал лучший способ решения проблемы.

То, что это возможно не означает, что желательно . YMMV, конечно.

0 голосов
/ 05 августа 2010

Возможно, я не совсем понял ваш вопрос, но, похоже, вам нужно отформатировать строку формата.Если это правда, вы можете попробовать что-то вроде этого:

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

Так что хитрость заключается в том, чтобы просто избежать { или }, используя двойной {{ или }}.

0 голосов
/ 05 августа 2010

Вы можете использовать RegEx, чтобы проанализировать три параметра из строки, а затем передать их в реальную, фактическую строку. Метод формата: -)

0 голосов
/ 05 августа 2010

Похоже, что вы хотите, это что-то вроде этого:

string sbStr = string.Format("{0}----{1}", siDTO.SuggestionItemID, siDTO.Title);
0 голосов
/ 05 августа 2010

Я не думаю, что вы можете выполнить это.Java на самом деле не является интерпретируемым языком.

Вы можете использовать языки сценариев (которые могут даже внедряться в ваше приложение Java, как я знаю, начиная с JDK6) для таких целей, как Groovy

...