Re: csharp 10
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.11.21 10:20
Оценка: 7 (1)
Здравствуйте, vaa, Вы писали:

vaa>мне одному кажется странным, что компилятор для локальной лямбды из контекста не может вывести тип аргумента?

vaa>
vaa>var parse = (string s) => int.Parse(s);
vaa>var parse = s => int.Parse(s); // ERROR: Not enough type info in the lambda
vaa>

Немного странновато. Такой же фейл происходит и, к примеру, вот тут:
private void Test<T1, T2>(Func<T1, T2> func){};
public void Test()
{
  Test(s=>int.Parse(s);
}

А вот в таком случае он ухитряется верно выбрать перегрузку:
private void Test<T>(Func<string, T> func) {Console.WriteLine("string");}
private void Test<T>(Func<int, T> func) {Console.WriteLine("int");}
public void Test()
{
  Test(s=>int.Parse(s));
  Test(s=>s+1);
}


vaa>welcome-to-csharp-10

vaa>И всё-таки:
vaa>
vaa>var choose = object (bool b) => b ? 1 : "two"; // Func<bool, object>
vaa>

vaa>гораздо менее читаемо, чем:
vaa>
vaa>let choose : bool -> obj = 
vaa>    function | true ->  1 | _ -> "two"
vaa>

Ну, как раз когда тип функции известен и вы готовы его записать, всё работает как надо:
Func<bool, object> choose = (b) => b ? 1 : "two";

или даже
Func<bool, object> choose = b => b switch {
  true => 1,
  _ => "two"
};
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.