С# lambda unnamed parameters
возможно ли отбросить некоторые аргументы в лямбда-выражениях, не называя их имени?
Например. Мне нужно передать Action < int, int > , но меня интересует только второй параметр, я хочу написать что-то вроде
(_, foo) => bar(foo)
// or
(, foo) => bar(foo)
В первом случае он работает. Но первый параметр не является неназванным, потому что он имеет имя "_". Поэтому он не работает, когда я хочу сбросить два или более. Я выбираю _, потому что в прологе он имеет значение "любое значение".
Итак. Есть ли специальный символ или выражение для моего варианта использования?
Ответы
Ответ 1
Нет, вы не можете. Глядя на грамматику С# language, существует два способа объявить lambdas: явный и неявный. Ни один из них не позволяет пропустить идентификатор параметра или повторно использовать идентификаторы (имена).
explicit-anonymous-function-parameter:
anonymous-function-parameter-modifieropt type identifier
implicit-anonymous-function-parameter:
identifier
То же, что и для неиспользуемых параметров функции в обычных функциях. Им нужно дать имя.
Конечно, вы можете использовать _
как имя для одного из параметров, так как это допустимое имя С#, , но это ничего не значит.
С С# 7 _
имеет особое значение. Не для имен параметров лямбда-выражения, но определенно для других вещей, таких как сопоставление образцов, деконструкция, выключение переменных и даже регулярные назначения. (Например, вы можете использовать _
= 5, без объявления _
.)
Ответ 2
Короткий ответ: no, вы должны указать каждый параметр, и имена должны быть уникальными.
Вы можете использовать _
как одно имя параметра, поскольку оно является допустимым идентификатором в С#.
Однако вы можете использовать его только один раз.
Ответ 3
В С# 7 вы можете использовать сбросы. Отбросы представляют собой только переменные, которые вы не можете прочитать. Это в основном для переменных, которые вы не хотите использовать
подробнее здесь