我将动态类型传递给方法,并且在运行代码时遇到一些问题。想知道您是否能够使用out关键字将动态对象作为参数传递。
以下是代码。
dynamic btApp = AutomationFactory.CreateObject("Test.Application");
dynamic btMessages;
dynamic btFormat = btApp.Formats.Open("c:\\Temp/Format1.btw", false, "");
btFormat.SetNamedSubStringValue("testing", "testtest");
btFormat.Print("Job1", true, -1, out btMessages);
btFormat.Close(2);
问题在于打印方法。最后一个参数在动态对象中传递的位置。
答案 0 :(得分:1)
将out参数传递给具有dynamic类型变量的方法时,参数本身必须是dynamic类型。以下代码是合法的:
class Program {
static void Main(string[] args) {
dynamic value;
SomeMethod(out value);
return;
}
static void SomeMethod(out dynamic value) {
value = "5";
return;
}
}
事实上,SomeMethod可以为价值分配任何东西。当参数不是dynamic类型时,编译器会在方法调用之前尝试转换,这是不允许的,所以如果SomeMethod中的参数不是动态的,那么你的运气不好。
答案 1 :(得分:0)
这取决于Print
方法的实际类型签名是什么。 dynamic
类型在运行时表示为object
,因此如果Print
方法采用类型为out
(或object
)的dynamic
参数,那它应该工作。
如果Print
方法具有某个其他类型的实际out
参数,则在调用方一侧使用的实际运行时类型与声明的实际类型不匹配,因此它将不行。