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

165
26 марта 2018, 22:40

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

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

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

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

new[] {"1", "2", "3"}.GroupBy(x => Test(x, "1", "1"));
  static string Test(string p1, string p2, string p3)
        {
            return "";
        }

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

Answer 1

Ваша функция от одного аргумента (x), и возвращает одно значение. Так что это всё ещё Func<T, U>.

Действительно, лямбда-выражение

x => Test(x, "1", "1")

можно представить себе как такую функцию:

string f(string x)
{
    return Test(x, "1", "1");
}

и GroupBy запишется как

new[] {"1", "2", "3"}.GroupBy(f);

Мы видим, что функция f от одного строкового аргумента, а то, что внутри неё вызывается функция от трёх аргументов, не играет никакой роли.

READ ALSO
Проблема с float и масштаб сцены unity

Проблема с float и масштаб сцены unity

В процессе разработки иногда сталкивался что изначально был выбран размер для объектов на сцене, приходилось scale у трансформы уменьшать...

221
Как изменить размер картинки в picturebox через textbox?

Как изменить размер картинки в picturebox через textbox?

Не могу найти как можно изменять размер изображения picturebox через textbox, необходимо чтоб изменялась только картинка по размеру а не сам элементКто-нибудь...

401
Распаковка шрифта из ресурсов проекта VS

Распаковка шрифта из ресурсов проекта VS

Не могу никак разобраться, в чем проблемаПочему не работает?

237