C #et lambda

  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 3229
  • Loc: South Africa
  • Status: Offline

Message Avril 24th, 2011, 2:00 pm

Eh bien, il a été un moment et j'ai travaillé avec des trucs vraiment cool ces derniers temps.

J'ai pensé partager cette pratique peu tid de l'info à vous rendre la vie plus facile. NET spécifiquement C #.

Combien de fois avez-vous en boucle à travers une liste correspondant à la recherche de propriétés de classe et de les ajouter à une autre liste pour les afficher? Eh bien, je sais que j'ai fait il moyen de nombreuses fois alors quand j'ai commencé à utiliser des expressions LINQ et lambda je suis vraiment excité!

Ok, donc sans plus un ne laisse aller.

Disons que nous avons une classe de base

Code: [ Select ]
public class Person{
 public String FirstName{get;set;}
 public String LastName{get;set;}
 public String Email{get;set;}
}
  1. public class Person{
  2.  public String FirstName{get;set;}
  3.  public String LastName{get;set;}
  4.  public String Email{get;set;}
  5. }


Maintenant, étant donné une méthode qui remplit une liste d'objets Person
Code: [ Select ]
var myList = new List<Person>();

for(int i = 0; i < 10; i++){
myList.Add(
 //Excuse the concatination, prefered method is String.Format
 new Person{FirstName = "Name [1]" + 1, LastName = "LastName " + [1], Email = "Email" + i + "@domain.com"};
)
}
  1. var myList = new List<Person>();
  2. for(int i = 0; i < 10; i++){
  3. myList.Add(
  4.  //Excuse the concatination, prefered method is String.Format
  5.  new Person{FirstName = "Name [1]" + 1, LastName = "LastName " + [1], Email = "Email" + i + "@domain.com"};
  6. )
  7. }


Maintenant, nous avons une liste de personne avec 10 entrées. Maintenant, si nous voulions trouver l'entrée avec le nom "Nom 1" de la première serait traditionnellement une boucle sur la liste jusqu'à ce que vous correspond le nom. Quelque chose comme

Code: [ Select ]
var myPerson = null;
foreach(var person in myList){
 if(myList.FirstName.Equals("Name 1")){
  myPerson = person;
  break;
 }
}
  1. var myPerson = null;
  2. foreach(var person in myList){
  3.  if(myList.FirstName.Equals("Name 1")){
  4.   myPerson = person;
  5.   break;
  6.  }
  7. }


L'homme qui peut parfois ennuyeux. Donc, MS nous a fourni un ensemble pratique de la méthode d'extension de la bibliothèque LINQ. Pour l'inclure dans votre cs fichier que vous avez simplement référence à l'espace de noms System.Linq

Code: [ Select ]
using System.Linq;


Maintenant, pour réaliser la même chose que la boucle foreach nous suffit d'aller
Code: [ Select ]
//The first or default method returns null if it doesn't find a match, First() will throw an exception if no
//matching objects are found
var myPerson = myList.FirstOrDefault(person => person.FirstName.Equals("Name 1"));
  1. //The first or default method returns null if it doesn't find a match, First() will throw an exception if no
  2. //matching objects are found
  3. var myPerson = myList.FirstOrDefault(person => person.FirstName.Equals("Name 1"));


Maintenant, c'est super!
Nous pouvons également des listes requête dans la liste
Code: [ Select ]
//Obviously this will return all ten results but illustrates the purpose
var myNewList = myList.Where(person => person.FirstName.StartsWith("Name "));
  1. //Obviously this will return all ten results but illustrates the purpose
  2. var myNewList = myList.Where(person => person.FirstName.StartsWith("Name "));


Cool hein? Mais ce n'est que le début! Dites nous ajoutons une autre propriété à la personne.
Code: [ Select ]
public class Person{
 public String FirstName{get;set;}
 public String LastName{get;set;}
 public String Email{get;set;}
 public int Salary {get;set;} //yes I know, float float float -> keeping it simple
}
  1. public class Person{
  2.  public String FirstName{get;set;}
  3.  public String LastName{get;set;}
  4.  public String Email{get;set;}
  5.  public int Salary {get;set;} //yes I know, float float float -> keeping it simple
  6. }


et nous le remplir avec
Code: [ Select ]
var myList = new List<Person>();
Random random = new Random();
int randomNumber = random.Next(0, 100);

for(int i = 0; i < 10; i++){
myList.Add(
 //Excuse the concatination, prefered method is String.Format
 var salary = random.Next() * 1;
 new Person{FirstName = "Name [1]" + 1, LastName = "LastName " + [1], Email = "Email" + i + "@domain.com", Salary = salary};
)
}
  1. var myList = new List<Person>();
  2. Random random = new Random();
  3. int randomNumber = random.Next(0, 100);
  4. for(int i = 0; i < 10; i++){
  5. myList.Add(
  6.  //Excuse the concatination, prefered method is String.Format
  7.  var salary = random.Next() * 1;
  8.  new Person{FirstName = "Name [1]" + 1, LastName = "LastName " + [1], Email = "Email" + i + "@domain.com", Salary = salary};
  9. )
  10. }


Et nous voulons trouver le coût total de notre Liste des personnes
Code: [ Select ]
var total = myList.Sum(person => person.Salary);

Ou nous voulons trouver la moyenne de tous les salaires
Code: [ Select ]
var avg = myList.Avg(person => person.Salary);


Maintenant, je ne m'inquiète pas qui vous êtes, qui est cool.It s'étend bien plus loin que cela si je recommande d'avoir un coup d'oeil!

Pour plus d'informations à vérifier
Les expressions lambda:
http://msdn.microsoft.com/en-us/library/bb397687.aspx

Linq
http://msdn.microsoft.com/en-us/netframework/aa904594

Amusez-vous!
Watch me grow
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Avril 24th, 2011, 2:00 pm

Afficher de l'information

  • Total des messages de ce sujet: 1 message
  • Modérateur: Tutorial Writers
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC