Just some LINQ code


Scott Hanselman put up a post showing some nifty LINQ code. I’ve been dabbling with it a little here and there, trying to see what it gave me. I like the new way of declaring member variables:

int _age;

public int Age

{

   get { return _age; }

   set { _age = value; }

}

 

is fairly verbose, and it doesn’t add any real value for readability. So, I’m a huge fan of this:

public int Age { get; set; }

 

which is identical in the eyes of the compiler, but way better for doing a code review.

I also like the vanishing need to add properties and appropriate constructors. I like being able to write

new Person(){Age = 11, Gender=Gender.Male, Name=“Vince”}

without needing to write something like this:

public Person(int age, Gender gender, string name)

I also like the simpler lambdas and other expressions. So, tonight I finally put together all the different basic features and had this running:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Collections;

 

namespace LinqStuff

{

  enum Gender

  {

    Male,

    Female

  }

 

class Person

{

   public int Age { get; set; }

   public Gender Gender { get; set; }

   public string Name { get; set; }

 

   public override string ToString()

   {

       return string.Format(“{0}: {1}: {2}”, Name, Age, Gender.ToString());

   }

}

 

class Program

{

   static void Main(string[] args)

   {

      var people = new List<Person>(new Person[] {

          new Person(){Age = 11, Gender=Gender.Male, Name=“Vince”},

          new Person(){Age = 6, Gender=Gender.Female, Name=“Angeline”},

          new Person(){Age = 5, Gender=Gender.Male, Name=“Phillip”}

      });

      var boys = from a in people where a.Gender == Gender.Male orderby a.Name select a;

      people.Add(new Person() { Age = 37, Gender = Gender.Female, Name = “Jean” });

 

      ListEm<Person>(boys);

 

      people.Add(new Person() { Age = 35, Gender = Gender.Male, Name = “Scott” });

      ListEm<Person>(boys);

}

 

stati
c
void ListEm<T>(IEnumerable<T> vals)

{

      new List<T>(vals).ForEach(a => Console.Write(a.ToString() + “,”));

      Console.WriteLine();

}

}

}

 

The coolest thing here? My wife is learning C#. She took one look at the code and was able to instantly see that boys would automatically update as the people collection changed. The syntax passes the ‘is it instantly grokkable’ test for my sample audience of 1. I do like the fact that this syntax does focus more on what I want done instead of having to prescribe how to do it.

  1. Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: