diff --git a/td/generate/DotnetTlDocumentationGenerator.php b/td/generate/DotnetTlDocumentationGenerator.php
index 7e11cc665..fd99c0c42 100644
--- a/td/generate/DotnetTlDocumentationGenerator.php
+++ b/td/generate/DotnetTlDocumentationGenerator.php
@@ -213,7 +213,7 @@ EOT
///
EOT;
foreach ($known_fields as $name => $type) {
- $full_doc .= '\r\n /// '.$info[$name]."";
+ $full_doc .= "\r\n /// getParameterName($name, $class_name).'">'.$info[$name]."";
}
$this->addDocumentation($full_constructor, $full_doc);
}
diff --git a/td/generate/tl_writer_dotnet.h b/td/generate/tl_writer_dotnet.h
index d6f6f3d90..011f4a390 100644
--- a/td/generate/tl_writer_dotnet.h
+++ b/td/generate/tl_writer_dotnet.h
@@ -527,9 +527,7 @@ class TlWriterDotNet : public TL_writer {
return ss.str();
}
ss << "{\n";
- ss << " CallFromUnmanaged<" << class_name << "^> res;\n";
- ss << " downcast_call(from, res);\n";
- ss << " return CallFromUnmanagedRes<" << class_name << "^>::res;\n";
+ ss << " return DoFromUnmanaged<" << class_name << "^>(from);\n";
ss << "}\n";
}
return ss.str();
diff --git a/td/tl/tl_dotnet_object.h b/td/tl/tl_dotnet_object.h
index d81420a20..b60f28638 100644
--- a/td/tl/tl_dotnet_object.h
+++ b/td/tl/tl_dotnet_object.h
@@ -100,30 +100,21 @@ auto CLRCALL FromUnmanaged(td::td_api::object_ptr &from) -> decltype(FromUnma
return FromUnmanaged(*from.get());
}
-template
-ref class CallFromUnmanagedRes {
-public:
- static property ResT res;
-};
-
-template
-struct CallFromUnmanaged {
- template
- void operator()(T &val) const {
- CallFromUnmanagedRes::res = FromUnmanaged(val);
- }
-};
+template
+inline ResT DoFromUnmanaged(T &from) {
+ ResT res;
+ downcast_call(from, [&](auto &from_downcasted) {
+ res = FromUnmanaged(from_downcasted);
+ });
+ return res;
+}
inline BaseObject^ FromUnmanaged(td::td_api::Function &from) {
- CallFromUnmanaged res;
- downcast_call(from, res);
- return CallFromUnmanagedRes::res;
+ return DoFromUnmanaged(from);
}
inline BaseObject^ FromUnmanaged(td::td_api::Object &from) {
- CallFromUnmanaged res;
- downcast_call(from, res);
- return CallFromUnmanagedRes::res;
+ return DoFromUnmanaged(from);
}
// to unmanaged