Csharp/CSharp Tutorial/LINQ/Anonymous

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

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>