Как получить строку с string.format, чтобы выполнить?

StackOverflow https://stackoverflow.com/questions/3411290

  •  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");

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top