C# 获取动态类型的类类型?

C# 获取动态类型的类类型?,c#,.net,dynamic-data,C#,.net,Dynamic Data,我写了一些代码: public static object func() { return new { a = 1, b = 2 }; } Console.WriteLine((func() as dynamic).a); //returns '1'. 如果我能做到:func()是动态的那么动态应该是某种引用类型/类 我查找了它的类类型,但找不到任何类型(通过reflector) 它是什么类型的?(引用类型)?您可以像往常一样通过GetType(

我写了一些代码:

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

   Console.WriteLine((func() as dynamic).a); //returns '1'.
如果我能做到:
func()是动态的
那么动态应该是某种引用类型/类

我查找了它的类类型,但找不到任何类型(通过reflector)


它是什么类型的?(引用类型)?

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

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

如果您查看reflector,可能有一个内部泛型类型以'2结尾(表示2个泛型类型参数),第一个和第二个泛型类型参数分别具有两个属性“a”和“b”。它是一个类,因此是一个引用类型

请注意:

new { a = true, b = 123.45 }
将实际使用相同的泛型类型,但具有不同的泛型类型参数


还有,;使用
dynamic
不会更改对象-它只会更改访问它的方式。

因为int是Int32的别名,dynamic是xxx的别名吗?@Royi啊,但实际上可以是int/Int32(可能是装箱的)。任何对象实际上都不是动态类型。就像没有对象是IFoo类型(接口)一样。变量(或表达式)为动态类型;这只是告诉编译器如何使用它——它不会改变实际对象。我将使用dynamic(不是expando,也不是在函数返回类型的上下文中)的真实场景是什么?我知道我正在处理的所有对象,所以在rel life中,我将遇到一个“新的未知类型”的场景,我将不得不处理…?@Royi COM或从动态语言(Iron*可能)与对象交谈都是很好的例子。此外,使用基于模式的方法还可以做一些有趣的事情——请参见Simple.Data。在大多数例程代码中,接口是一个更好的抽象