Лингвофорум

Общий раздел => Игры => Просто общение => Новогодний маскарад => Тема начата: І. G. от декабря 26, 2013, 08:56

Название: НГ/Code
Отправлено: І. G. от декабря 26, 2013, 08:56
Цитата: Тайльнемер от декабря 26, 2013, 08:53
Code:

public static string NumeralWithRussianNoun(this int number,
  string nounTemplate, bool showNumber = true)
{
  var forms = nounTemplate.Split('|');
  int units = number.Abs().Mod(10);
  int tens = number.Abs().Div(10).Mod(10);
  return (showNumber ? "{0} {1}{2}" : "{1}{2}").Fmt(number, forms[0],
    tens != 1 && units != 0 && units < 5 ? units == 1
      ? forms.Length > 1 ? forms[1] : ""
      : forms.Length > 2 ? forms[2] : ""
      : forms.Length > 3 ? forms[3] : "");
}

А что значит this в списке аргументов?
Название: НГ/Code
Отправлено: Тайльнемер от декабря 27, 2013, 06:52
Цитата: І. G. от декабря 26, 2013, 08:56
А что значит this в списке аргументов?
Это значит, что этот статический метод доступен для синтаксического сахара под названием extension methods, суть которго в том, что первый аргумент может быть поставлен перед именем метода и отделён точкой, как будто мы вызываем метод этого объекта.

Т. е., мы можем вместо  StaticClassName.NumeralWithRussianNoun(1000, "черт||а|ей")  писать  1000.NumeralWithRussianNoun("черт||а|ей").

В данном случае один хрен, но часто такая форма записи бывает очень удобна.