Gabe Moothart
Gabe Moothart

Reputation: 32112

Is there any difference between `new object()` and `new {}` in c#?

in c#,

var x = new {};

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

var x = new object();

?

Upvotes: 6

Views: 2875

Answers (4)

Gabe Moothart
Gabe Moothart

Reputation: 32112

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.

Upvotes: 0

Timothy Carter
Timothy Carter

Reputation: 15785

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

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1502506

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.

Upvotes: 10

Jonas
Jonas

Reputation: 4584

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.

Upvotes: 8

Related Questions