встроенный переключатель c # в строке формата

1

Я хотел бы отформатировать фразу и сделать окончание в соответствии с количеством элементов.

string s = string.Format("There are {0} items, bla bla {1}",
 itemsCnt, 
 () => {switch(itemsCnt)
 {
    case 0:
      return "make some...";
    case 1:
    case 2:
      return "try more";
    default:
      return "enough";
 }}
);

Синтаксис неправильный, я считаю, что анонимный метод должен работать здесь как-то...

Обновление:

Я мог бы использовать отдельную функцию форматирования. Я хотел бы использовать функцию в Razor, и я хотел бы видеть, что она формирует логику в одном месте. И, кроме того, мне было любопытно, как это сделать :-)

  • 3
    Кажется, это излишне сложный способ сделать это. Почему бы не вычислить «окончание», как вы его называете, с помощью оператора switch перед оператором присваивания / форматирования?
  • 0
    string.Format не имеет перегрузки, которая принимает и выполняет объекты Func. Он просто вызывает метод ToString () для объектов в массиве params, что обычно не имеет особого смысла для объектов Func.
Теги:
inline
anonymous-methods

2 ответа

3
Лучший ответ

Код создает делегат Func и выполняет его:

string s = string.Format("There are {0} items, bla bla {1}",
            itemsCnt,
            new Func<string>(() =>
            {
                switch (itemsCnt)
                {
                    case 0:
                        return "make some...";
                    case 1:
                    case 2:
                        return "try more";
                    default:
                        return "enough";
                }
            })()
            );
  • 0
    Вот и все. Мне нравится это решение больше, чем отдельная функция, потому что его легко использовать в Razor и логика форматирования в одном месте.
  • 2
    @ qub1n Вы хотите, чтобы в ваших представлениях было как можно меньше кода. Методный подход звучит более разумно в том случае, когда вы добавляете метод в модель представления.
4

Зачем использовать анонимный метод здесь?

Регулярный был бы так же хорош:

private string Translate(int itemsCnt)
{
 switch(itemsCnt)
 {
    case 0:
      return "make some...";
    case 1:
    case 2:
      return "try more";
    default:
      return "enough";
 }
}

то результат:

string s = string.Format("There are {0} items, bla bla {1}",
                         itemsCnt, 
                         Translate(itemsCnt));

string.Format(...) не имеет перегрузки, которая принимает функцию

Ещё вопросы

Сообщество Overcoder
Наверх
Меню