Csharp/CSharp Tutorial/LINQ/Anonymous
Содержание
- 1 Anonymous Method
- 2 Anonymous Type
- 3 Anonymous Type In Array
- 4 Anonymous Types
- 5 Array of anonymous types
- 6 Construct instance for nested class
- 7 Create new object from query
- 8 Implicit Local Variables with Anonymous Types
- 9 Return From Anonymous Method
- 10 Simple Anonymous Methods for calculating the mean value
- 11 Simple Anonymous Methods for printing out reverse numbers
- 12 Simple Anonymous Methods for printing the square root
- 13 Using Anonymous Methods with Find
Anonymous Method
<source lang="csharp">using System; using System.ruponentModel;
class MainClass { static void Main() { Func<string, int> returnLength = delegate(string text) { return text.Length; }; Console.WriteLine(returnLength("Hello")); } }</source>
Anonymous Type
<source lang="csharp">using System; using System.ruponentModel;
class MainClass { static void Main() { var tom = new { Name = "Tom", Age = 4 }; var holly = new { Name = "Holly", Age = 31 }; var jon = new { Name = "Jon", Age = 31 }; Console.WriteLine("{0} is {1} years old", jon.Name, jon.Age); } }</source>
Anonymous Type In Array
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ruponentModel;
class AnonymousTypeInArray { static void Main() { var family = new[] { new { Name = "H", Age = 31 }, new { Name = "R", Age = 1 }, new { Name = "W", Age = 1 } }; int totalAge = 0; foreach (var person in family) { totalAge += person.Age; } Console.WriteLine("Total age: {0}", totalAge); } }</source>
Anonymous Types
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ruponentModel;
class AnonymousTypes { static void Main() { var jon = new { Name = "Jon", Age = 31 }; var tom = new { Name = "Tom", Age = 4 }; Console.WriteLine("{0} is {1}", jon.Name, jon.Age); Console.WriteLine("{0} is {1}", tom.Name, tom.Age); } }</source>
Array of anonymous types
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text; class Program {
static void Main(string[] args) { var curries = new[] { new { M = "A", S= "C", A = 5 }, new { M = "B", S= "B", A= 5 }, new { M = "C", S= "A", A= 5 } }; Console.WriteLine(curries[0].ToString()); Console.WriteLine(curries[0].GetHashCode()); Console.WriteLine(curries[1].GetHashCode()); Console.WriteLine(curries[2].GetHashCode()); Console.WriteLine(curries[0].Equals(curries[1])); Console.WriteLine(curries[0].Equals(curries[2])); Console.WriteLine(curries[0] == curries[1]); Console.WriteLine(curries[0] == curries[2]); }
}</source>
Construct instance for nested class
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text;
class Employee { public string Name { get; set; } public decimal Salary { get; set; } } class Department { public string Name { get; set; } List<Employee> employees = new List<Employee>(); public IList<Employee> Employees { get { return employees; } } } class Company { public string Name { get; set; } List<Department> departments = new List<Department>(); public IList<Department> Departments { get { return departments; } } } class SalaryReport { static void Main() { var company = new Company { Name = "A", Departments = { new Department { Name = "Development", Employees = { new Employee { Name = "T", Salary = 75000m }, new Employee { Name = "D", Salary = 45000m }, new Employee { Name = "M", Salary = 150000m } } }, new Department { Name = "Marketing", Employees = { new Employee { Name = "Z", Salary = 200000m }, new Employee { Name = "X", Salary = 120000m } } } } }; var query = company.Departments .Select(dept => new { dept.Name, Cost = dept.Employees.Sum(person => person.Salary) }) .OrderByDescending(deptWithCost => deptWithCost.Cost); foreach (var item in query) { Console.WriteLine(item); } } }</source>
Create new object from query
<source lang="csharp">using System; using System.Collections.Generic; using System.Text; using System.Xml.Linq; using System.Linq;
class Car { public string PetName; public string Color; public int Speed; public string Make; public override string ToString() { return string.Format("Make={0}, Color={1}, Speed={2}, PetName={3}",Make, Color, Speed, PetName); } } class Program { static void Main(string[] args) { Car[] myCars = new []{ new Car{ PetName = "A", Color = "Silver", Speed = 100, Make = "BMW"}, new Car{ PetName = "B", Color = "Black", Speed = 55, Make = "VW"}, new Car{ PetName = "C", Color = "White", Speed = 43, Make = "Ford"} }; var makesColors = from c in myCars select new {c.Make, c.Color}; foreach (var o in makesColors) { Console.WriteLine(o.ToString()); } } }</source>
Implicit Local Variables with Anonymous Types
<source lang="csharp">class Program {
static void Main() { var patent1 =new { Title = "A", YearOfPublication = "1984" }; var patent2 =new { Title = "B", YearOfPublication = "1977" }; System.Console.WriteLine("{0} ({1})",patent1.Title, patent1.YearOfPublication); System.Console.WriteLine("{0} ({1})",patent2.Title, patent1.YearOfPublication); }
}</source>
Return From Anonymous Method
<source lang="csharp">using System; using System.ruponentModel;
class ReturnFromAnonymousMethod { static void Main() { Predicate<int> isEven = delegate(int x) { return x % 2 == 0; }; Console.WriteLine(isEven(1)); Console.WriteLine(isEven(4)); } }</source>
Simple Anonymous Methods for calculating the mean value
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel;
class MainClass { static void Main() { Action<IList<double>> printMean = delegate(IList<double> numbers) { double total = 0; foreach (double value in numbers) { total += value; } Console.WriteLine(total / numbers.Count); }; double[] samples = { 1.5, 2.5, 3, 4.5 }; printMean(samples); } }</source>
Simple Anonymous Methods for printing out reverse numbers
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel;
class MainClass { static void Main() { Action<string> printReverse = delegate(string text) { char[] chars = text.ToCharArray(); Array.Reverse(chars); Console.WriteLine(new string(chars)); };
printReverse("Hello world"); } }</source>
Simple Anonymous Methods for printing the square root
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel;
class MainClass { static void Main() { Action<int> printRoot = delegate(int number) { Console.WriteLine(Math.Sqrt(number)); };
printRoot(2); } }</source>
Using Anonymous Methods with Find
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; using System.Xml.Linq;
class Program { static void Main(string[] args) { List<string> myList1 = new List<string>(); myList1.Add("A"); myList1.Add("B"); myList1.Add("C"); myList1.Add("D"); string vanilla1 = myList1.Find(delegate(string icecream) { return icecream.Equals("B"); }); Console.WriteLine(vanilla1); } }</source>