c#中的`new object()`和`new {}`之间有什么区别吗?

时间:2009-06-22 15:58:32

标签: c# syntax anonymous-types

在c#中,

var x = new {};

声明一个没有属性的匿名类型。这与

有什么不同
var x = new object();

4 个答案:

答案 0 :(得分:10)

是的,使用的类型不同。您可以在编译时告诉它:

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

如果你问new{}是否有用 - 那么,这是另一回事......我不能立即想到任何明智的用途。

答案 1 :(得分:8)

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

答案 2 :(得分:0)

如上所述,从GetType返回,x将不是object类型,因此您无法将对象类型分配给该变量。

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

        //x = y; //not allowed
        y = x; //allowed

答案 3 :(得分:0)

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

new {}会覆盖object的三种方法:

  1. Equals - 如其他答案中所述,new objectnew {}有不同的类型,因此它们并不相同。
  2. GetHashCodenew {}返回0(但为什么还要将它放在哈希表中?)
  3. ToStringnew {}
  4. 打印“{}”

    不幸的是,我无法想到这一切的实际应用。我只是很好奇。