Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Anonymous Types in C#

// x is compiled as an int 
var x = 10;

// y is compiled as a string 
var y = "Hello";

// z is compiled as int[] 
var z = new[] { 0, 1, 2 };

but

// ano is compiled as an anonymous type 
var ano = new { x1 = 10, y1 = "Hello" };

ano object's properties created are read-only . I want to figure it out why those properties are read only. suggestions are appreciated ?

EDIT:

var ano1 = new { x1 = 10, y1 = "Hello" };

var ano2 = new { x1 = 10, y1 = "Hello" };

Is that if the new anonymous type has the same number and type of properties in the same order will it be of the same internal type as the first ?

like image 316
Thilina H Avatar asked Sep 15 '13 18:09

Thilina H


1 Answers

var does not mean "use an anonymous type", it means "Compiler, go figure out the type for me!". In the first three cases, the type is actually a "named" type - System.Int32, System.String, and System.Int32[] (in the last case the type of array's elements is also deduced by the compiler from the type of array elements that you put in the initializer).

The last case is the only one where an anonymous type is used. It is by design that C#'s anonymous types are immutable. The primary case for adding them in the language in the first place has been introduction of LINQ, which does not need mutability in cases when anonymous types are produced. In general, immutable classes tend to give designers less problems, especially when concurrency is involved, so designers of the language decided to go with immutable anonymous types.

like image 59
Sergey Kalinichenko Avatar answered Oct 29 '22 20:10

Sergey Kalinichenko