diff --git a/TestSuite/foreach14.pas b/TestSuite/foreach14.pas new file mode 100644 index 000000000..ba414a800 --- /dev/null +++ b/TestSuite/foreach14.pas @@ -0,0 +1,13 @@ +type c1 = class end; + +var i := 0; +begin + + var d := new Dictionary; + d.Add(new c1, ()->begin i := 1 end); + + foreach var v in d.Values do + //Ошибка: Невозможно явно преобразовать тип c1 к типу System.Action + Action0(v).Invoke(); + assert(i = 1); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 76f6511b5..f11723ddb 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -18469,7 +18469,11 @@ namespace PascalABCCompiler.TreeConverter break; } } - if (elem_type == null) + if (ct.Name == "ValueCollection" && ct.IsNested && ct.GetGenericArguments().Length == 2) + { + elem_type = ip[1]; + } + else if (elem_type == null) elem_type = ip[0]; }