pascalabcnet / pascalabcnet

The new generation Pascal programming language for .NET
http://pascalabc.net
371 stars 101 forks source link

Компилятор не подставляет пользовательский тип вместо шаблонного при выводе лямбды для метода из .dll #3029

Open SunSerega opened 7 months ago

SunSerega commented 7 months ago

0.zip

{$reference 'Eto.dll'}

// Обязательно пользовательский тип для .BindDataContext
type t1 = class end;

begin
  var tb := new Eto.Forms.TextBox;

  // Если оба делегата задать переменными - компилируется норм
  var get_text := function(o: t1): string -> 'asd';
  var set_text := procedure(o: t1; s: string) -> begin end;
  tb.TextBinding.BindDataContext&<t1>(get_text, set_text);
  // Ну и так тоже работает
  tb.TextBinding.BindDataContext(get_text, set_text);

  // Чтобы была ошибка - хотя бы 1 из делегатов должен быть задан лямбдой
  //Ошибка: Нельзя преобразовать тип Action<TObject,EventHandler<System.EventArgs>> к Action<t1,EventHandler<System.EventArgs>>
  tb.TextBinding.BindDataContext&<t1>(o->'asd', (o,s)->begin end);

end.

(Eto.dll в .zip)

SunSerega commented 7 months ago

Найдено в https://github.com/pascalabcnet/pascalabcnet/discussions/2946