6

在 C# 中,

var x = new {};

声明一个没有属性的匿名类型。这有什么不同

var x = new object();

?

4

4 回答 4

10

是的,使用的类型不同。你可以在编译时告诉这个:

var x = new {};
// Won't compile - no implicit conversion from object to the anonymous type
x = new object(); 

如果您要问是否new{}有用-好吧,那是另一回事......我无法立即想到它的任何合理用途。

于 2009-06-22T16:08:17.770 回答
8

好吧,对于初学者来说,object 是一个实际的、非匿名类型……如果您在第二个示例中执行 x.GetType(),您将返回 System.Object。

于 2009-06-22T16:00:36.287 回答
0

Jon Skeet 的回答主要是我想要的,但为了完整起见,这里还有一些从反射器中获得的差异:

new {}覆盖以下三种方法object

  1. Equals- 如其他答案中所述,new object并且new {}具有不同的类型,因此它们不相等。
  2. GetHashCode返回 0 new {}(但你为什么要把它放在哈希表中呢?)
  3. ToString打印“{}”new {}

不幸的是,我想不出这一切的实际应用。我只是好奇而已。

于 2009-06-22T16:37:57.793 回答
0

除了前面提到的 GetType 的返回之外,x 不是对象类型,因此您无法将对象类型分配给该变量。

        var x = new { };
        var y = new object();

        //x = y; //not allowed
        y = x; //allowed
于 2009-06-22T16:09:31.763 回答