Мистическая "толстая кишка" в С#

Я работал над рефакторингом некоторого кода С# с ReSharper. Одна из вещей, с которыми я столкнулся, - это оператор С#, с которым я не знаком.

В моем коде у меня было это

Mathf.FloorToInt(NumRows/2)

где NumRows - целое число. ReSharper предлагает мне изменить его на

Mathf.FloorToInt(f: NumRows/2)

Я уверен, что f: - это некоторый флаг, который сообщает ему, чтобы он использовал NumRows как float, но я не могу найти документацию для f: в Интернете. Может ли кто-нибудь уточнить, что именно делает f: или связывает меня со страницей MSDN об этом?

(Хотя у меня есть хорошее представление о том, что f: делает, трудно искать в Интернете двоеточие, и я хотел бы знать, что он делает, прежде чем использовать его)

Обновление 1: Независимо от того, что я пытаюсь сделать, меня интересует синтаксис f-двоеточия

Обновление 2: Оказывается, на самом деле это была Visual Studio, предполагающая, что я могу добавить имя аргумента 'f' не ReSharper, но это не меняет правильный ответ.

Ответ 1

Это named parameter. Посмотрите на определение Mathf.FloorToInt, он будет иметь параметр с именем f.

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

Ответ 2

В С# 4.0 вы можете переключать выражения параметров в вызове метода.

Когда есть только один параметр, это не поможет вам, если вообще: нет сомнений в том, что представляет выражение, если есть только один параметр. Однако с несколькими параметрами функция становится намного более полезной: вы можете сопоставлять имена параметров с выражениями, представляющими их значения, и передавать параметры в любом порядке, который вам нравится. Читателям вашей программы не нужно будет ссылаться на подпись метода, чтобы понять, какое выражение представляет какой параметр.

private static void MyMethod(int a, int b, int c) {
    Console.WriteLine("{0} {1} {2}", a, b, c);
}

public static void Main(string[] args) {
    MyMethod(1, 2, 3);
    MyMethod(c:1, a:2, b:3);
}

Отпечатает

1 2 3
2 3 1