方法参数中的动态类型

时间:2010-10-14 01:37:40

标签: c# silverlight types

我将动态类型传递给方法,并且在运行代码时遇到一些问题。想知道您是否能够使用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);

问题在于打印方法。最后一个参数在动态对象中传递的位置。

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参数,则在调用方一侧使用的实际运行时类型与声明的实际类型不匹配,因此它将不行。