Anonymous types provide a convenient way to encapsulate a set of
read-only properties into a single object without having to explicitly
define a type first. The type name is generated by the compiler and is
not available at the source code level. The type of each property is
inferred by the compiler.
You create anonymous types by using the new operator together with an object initializer.
The following example shows an anonymous type that is initialized with two properties named Amount and Message.
var v = new { Amount = 108, Message = "Hello" }; // Rest the mouse pointer over v.Amount and v.Message in the following // statement to verify that their inferred types are int and string. Console.WriteLine(v.Amount + v.Message);
Anonymous types typically are used in the select clause of a query expression to return a subset of the properties from each object in the source sequence.
Anonymous types contain one or more public read-only properties. No
other kinds of class members, such as methods or events, are valid. The
expression that is used to initialize a property cannot be null, an anonymous function, or a pointer type.
The most common scenario is to initialize an anonymous type with
properties from another type. In the following example, assume that a
class exists that is named Product. Class Product includes Color and Price properties, together with other properties that you are not interested in. Variable products is a collection of Product objects. The anonymous type declaration starts with the new keyword. The declaration initializes a new type that uses only two properties from Product. This causes a smaller amount of data to be returned in the query.
If you do not specify member names in the anonymous type, the compiler
gives the anonymous type members the same name as the property being
used to initialize them. You must provide a name for a property that is
being initialized with an expression, as shown in the previous example.
In the following example, the names of the properties of the anonymous
type are Color and Price.
var productQuery = from prod in products select new { prod.Color, prod.Price }; foreach (var v in productQuery) { Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price); }
Typically, when you use an anonymous type to initialize a variable, you
declare the variable as an implicitly typed local variable by using var.
The type name cannot be specified in the variable declaration because
only the compiler has access to the underlying name of the anonymous
type.
You can create an array of anonymously typed elements by combining an
implicitly typed local variable and an implicitly typed array, as shown
in the following example.
var anonArray = new[] { new { name = "apple", diam = 4 }, new { name = "grape", diam = 1 }};
No comments :
Post a Comment