views:

265

answers:

4

in c#,

var x = new {};

declares an anonymous type with no properties. Is this any different from

var x = new object();

?

+7  A: 

Well, for starters, object is an actual, non-anonymous type...if you do x.GetType() on the 2nd example, you'll get back System.Object.

Jonas
+10  A: 

Yes, the types used are different. You can tell this at compile-time:

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

If you're asking whether new{} is ever useful - well, that's a different matter... I can't immediately think of any sensible uses for it.

Jon Skeet
+up for being more clear than I was :)
Jonas
"whether new{} is ever useful" this is a good material for another question. :)
Arnis L.
I'm curious, does the anonymous object created by new {} still inherit from System.Object?
Patrick McDonald
All C# types inherit from System.Object, so yes.
Timothy Carter
Strictly speaking, all C# class and struct types inherit from (or are identical to) object. Interface types are convertible to object but do not inherit from object. Type parameter types are convertible to their effective base class, which always inherits from (or is identical to) object. Pointer types neither inherit from nor are convertible to object.
Eric Lippert
`new{}` is great: it's far more compact than `new object()`.
Justice
A: 

Along with the return from GetType as mentioned, x would not be of type object, so you would not be able to assign an object type to that variable.

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

        //x = y; //not allowed
        y = x; //allowed
Timothy Carter
A: 

Jon Skeet's answer was mostly what I wanted, but for the sake of completeness here are some more differences, gained from reflector:

new {} overrides three methods of object :

  1. Equals - as mentioned in other answers, new object and new {} have different types, so they are not equal.
  2. GetHashCode returns 0 for new {} (but why would you put it in a hash table anyway?)
  3. ToString prints "{}" for new {}

Unfortunately I can't think of a practical application for all this. I was just curious.

Gabe Moothart