Как получить строку с string.format, чтобы выполнить?
-
25-09-2019 - |
Вопрос
У меня небольшой кусок кода (см. Ниже), который возвращает строку:
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}
Может быть, я просто должен поставить свой фрагмент кода в метод. Но что тогда?
Решение
Почему вы включаете 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()
обрабатывает несколько параметров. Ключ является параметры Ключевое слово, которое просит компилятора обеспечить немного "синтаксический сахар" где он сочетает в себе параметры в массив для вас.
Ключ вот что упаковка не происходит, если вы уже проходите один object[]
- Так что если вы хотели, вы могли бы сделать что-то вроде этого:
object[] parameters
= ReturnParamValues(siDTO, "siDTO.SuggestionItemID,siDTO.Title");
string result
= string.Format("{0}----{1}----{2}", parameters);
Хотя, если я увидел что-то вроде этого в любом обслуживании кодовой базы, я бы относился к нему как кодовый запах и ищет лучший способ решить проблему.
Только потому, что это возможно не значит, что это целесообразно. Отказ YMMV, конечно.
Другие советы
Я не думаю, что вы можете выполнить его. Java не совсем интерпретированный язык.
Вы можете использовать языки сценариев (которые даже могут встроить в ваше приложение Java, как я знаю, начните с JDK6) для такой цели, как Groovy
Вы можете использовать Regex для анализа трех параметров из строки, а затем пропустить их на реальную, фактическую строку. Формат метода :-)
Похоже, что вы хотите, это что-то подобное:
string sbStr = string.Format("{0}----{1}", siDTO.SuggestionItemID, siDTO.Title);
Может быть, я не понял ваш вопрос полностью, но звучит так, как вам нужно форматировать формат-строку. Если это правда, вы можете попробовать что-то вроде этого:
int width = 5;
string format = String.Format("{{0,{0}}}----{{1,{0}}}", width);
string result = String.Format(format, "ab", "cd");
Так что трюк просто избежать {
или }
Используя двойной {{
или }}
.