in c#,
var x = new {};
declares an anonymous type with no properties. Is this any different from
var x = new object();
?
in c#,
var x = new {};
declares an anonymous type with no properties. Is this any different from
var x = new object();
?
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.
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.
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
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
:
Equals
- as mentioned in other answers, new object
and new {}
have different types, so they are not equal.GetHashCode
returns 0 for new {}
(but why would you put it in a hash table anyway?)ToString
prints "{}" for new {}
Unfortunately I can't think of a practical application for all this. I was just curious.