C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
This structure is composed of compound objects. With the select new clause, we create new objects of an anonymous type as the result of a query.
Note: These keywords are contextual. The "new" keyword has other uses in the C# language.
Example. The select new clause creates an anonymous type instance. In this program, we set the Value property of the anonymous type to the element itself. Then we set the Id property to the result of the Id method.
Based on: .NET 4.5 C# program that uses select new clause using System; using System.Linq; class Program { static void Main() { string[] array = { "one", "two", "three", "four", "", "seven" }; // Use Select New. var result = from element in array select new { Value = element, Id = Id(element) }; foreach (var anonymous in result) { string value = anonymous.Value; int id = anonymous.Id; Console.WriteLine(anonymous); } } static int _value; static int Id(string element) { // Get Id. return string.IsNullOrEmpty(element) ? -1 : _value++; } } Output { Value = one, Id = 0 } { Value = two, Id = 1 } { Value = three, Id = 2 } { Value = four, Id = 3 } { Value = , Id = -1 } { Value = seven, Id = 4 }
Finally, you can loop over the AnonymousType instances in the query expression result. We use var to simplify the syntax. This query expression transformed the string array into a collection of objects with a Value and Id property.
HTML. This example constructs HTML strings from a string array. In each anonymous type instance, an Html property and a Length property are present. We display them to the screen. This is not the fastest way to write this code.
Tip: For ideal performance when combining many strings together, consider a StringBuilder or a char array.
C# program that projects strings using System; using System.Linq; class Program { static void Main() { string[] items = { "cat", "dog", "mouse" }; // Project items into HTML strings. var html = from item in items select new { Html = "<p>" + item + "</p>", Length = item.Length }; // Display all projected values. foreach (var value in html) { Console.WriteLine(value.Html); Console.WriteLine(value.Length); } } } Output <p>cat</p> 3 <p>dog</p> 3 <p>mouse</p> 5
Summary. With select new, we project elements into anonymous types. We demonstrated this clause. This syntax allows us to construct anonymous data structures. These are created as they are evaluated (lazily).
And: You can avoid declaring classes to store this data entirely if you wish to.
However: Classes clarify and improve programs, like a form of built-in documentation, and anonymous type slack these positive features.