2011-11-24 129 views
4

我写了一些代码:获取动态类型的类类型?

public static object func() 
    { 
     return new { a = 1, b = 2 }; 
    } 

    Console.WriteLine((func() as dynamic).a); //returns '1'. 

如果我能做到:func() as dynamic所以动态应该是某种引用类型/类的。

我查找它的类类型,但找不到任何(通过反射器)。

它的类型是什么? (参考类型)?

回答

6

您可以像平常一样通过GetType()获取类型。

这是一个匿名类型,它是(作为实现细节)泛型类型的一种形式。这个类型的名字在c#中是故意不可发音的。

如果你看反射器,可能有一个内部泛型类型的地方以'2结尾(表示2个泛型类型参数),第一个和第二个泛型类型参数有两个属性“a”和“b”分别。它是一个类,所以是一个引用类型。

作为一个说明:

new { a = true, b = 123.45 } 

实际上使用相同的通用但具有不同的泛型类型参数。

另外;使用dynamic不会更改对象 - 它只会改变访问方式。

+0

as int是Int32的别名,动态是否是xxx的别名? –

+0

@罗伊啊,但事实上**可以** int/Int32(也许盒装)。实际上没有任何对象*是动态类型*。就像没有对象*是IFoo *类型(一个接口)一样。 **变量**(或表达式)是动态类型的;它只是告诉编译器如何使用它 - 它不会*改变*实际的对象。 –

+0

什么是我将使用动态(不是expando,而不是在返回类型的函数中)的真实场景?我知道所有正在与之合作的对象,那么在一个“新的未知类型”会出现在我的生活中,我将不得不面对的是什么? –