#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 от одного строкового аргумента, а то, что внутри неё вызывается функция от трёх аргументов, не играет никакой роли.
Комментариев нет:
Отправить комментарий