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);
}
static
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.