Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Func в LINQ. Почему нет ошибки?

#c_sharp #linq


Немного не догоняю.
Вот в GroupBy описано, что я могу подать на вход функцию System.Func.

Тем не менее, если я подам функцию с 3 и более элементами, то компилятор ее успешно
проглотит.

Хотя в описании метода написано, что ожидается функция, которая принимает 1 элемент.
Так и должно быть или я что-то путаю?

Ну допустим такой глупый пример:

new[] {"1", "2", "3"}.GroupBy(x => Test(x, "1", "1"));

  static string Test(string p1, string p2, string p3)
        {
            return "";
        }


Хотя написано, что требуется функция 1 параметра:


    


Ответы

Ответ 1



Ваша функция от одного аргумента (x), и возвращает одно значение. Так что это всё ещё Func. Действительно, лямбда-выражение x => Test(x, "1", "1") можно представить себе как такую функцию: string f(string x) { return Test(x, "1", "1"); } и GroupBy запишется как new[] {"1", "2", "3"}.GroupBy(f); Мы видим, что функция f от одного строкового аргумента, а то, что внутри неё вызывается функция от трёх аргументов, не играет никакой роли.

Комментариев нет:

Отправить комментарий