在 C# 中,
var x = new {};
声明一个没有属性的匿名类型。这有什么不同
var x = new object();
?
是的,使用的类型不同。你可以在编译时告诉这个:
var x = new {};
// Won't compile - no implicit conversion from object to the anonymous type
x = new object();
如果您要问是否new{}
有用-好吧,那是另一回事......我无法立即想到它的任何合理用途。
好吧,对于初学者来说,object 是一个实际的、非匿名类型……如果您在第二个示例中执行 x.GetType(),您将返回 System.Object。
Jon Skeet 的回答主要是我想要的,但为了完整起见,这里还有一些从反射器中获得的差异:
new {}
覆盖以下三种方法object
:
Equals
- 如其他答案中所述,new object
并且new {}
具有不同的类型,因此它们不相等。GetHashCode
返回 0 new {}
(但你为什么要把它放在哈希表中呢?)ToString
打印“{}”new {}
不幸的是,我想不出这一切的实际应用。我只是好奇而已。
除了前面提到的 GetType 的返回之外,x 不是对象类型,因此您无法将对象类型分配给该变量。
var x = new { };
var y = new object();
//x = y; //not allowed
y = x; //allowed