Подтвердить что ты не робот

С# lambda unnamed parameters

возможно ли отбросить некоторые аргументы в лямбда-выражениях, не называя их имени? Например. Мне нужно передать Action < int, int > , но меня интересует только второй параметр, я хочу написать что-то вроде

(_, foo) => bar(foo)
// or
(, foo) => bar(foo)

В первом случае он работает. Но первый параметр не является неназванным, потому что он имеет имя "_". Поэтому он не работает, когда я хочу сбросить два или более. Я выбираю _, потому что в прологе он имеет значение "любое значение".

Итак. Есть ли специальный символ или выражение для моего варианта использования?

4b9b3361

Ответ 1

Нет, вы не можете. Глядя на грамматику С# language, существует два способа объявить lambdas: явный и неявный. Ни один из них не позволяет пропустить идентификатор параметра или повторно использовать идентификаторы (имена).

explicit-anonymous-function-parameter:
  anonymous-function-parameter-modifieropt   type   identifier

implicit-anonymous-function-parameter:
  identifier

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

Конечно, вы можете использовать _ как имя для одного из параметров, так как это допустимое имя С#, , но это ничего не значит.

С С# 7 _ имеет особое значение. Не для имен параметров лямбда-выражения, но определенно для других вещей, таких как сопоставление образцов, деконструкция, выключение переменных и даже регулярные назначения. (Например, вы можете использовать _= 5, без объявления _.)

Ответ 2

Короткий ответ: no, вы должны указать каждый параметр, и имена должны быть уникальными.

Вы можете использовать _ как одно имя параметра, поскольку оно является допустимым идентификатором в С#.

Однако вы можете использовать его только один раз.

Ответ 3

В С# 7 вы можете использовать сбросы. Отбросы представляют собой только переменные, которые вы не можете прочитать. Это в основном для переменных, которые вы не хотите использовать подробнее здесь