There are many C# programmers out there… but you probably want to be the coolest… it’s not enough to just call a bunch of methods, invoke some delegates, etc. You need to write it cool.Here are some ways you can make yourself a cool C# programmer (and pick up geeky chicks at your local C# party): 1. Use anonymous delegates whenever possible (or lambda expressions, see 2):var nums = new List<int>();
//...
var nums2 = nums.FindAll(delegate(int n) {
return n % 2 == 0;
}); 2. Use lambda expressions when delegates are required (this is super-cool): button1.Click += (s, e) => {
MessageBox.Show("This is super-cool!");
};
3. If you’re using a lambda expression that accepts one argument and you don’t need it, provide its name as underscore: ThreadPool.QueueUserWorkItem((_) => {
Console.WriteLine("This is way too cool!");
}); 4. When raising events, the event should be checked to be non-null, but the cool thing to do is always register an empty handler so the check is unnecessary: class Printer {
public event EventHandler PagePrinted = delegate { };
//...
protected virtual void OnPagePrinted() {
PagePrinted(this, EventArgs.Empty); // look ma, no check!
}
} 5. Use LINQ whenever possible, using complex operators if you can:var procs = from p in Process.GetProcesses()
where p.Threads.Count > 15
orderby p.ProcessName
group new {
Name = p.ProcessName,
Id = p.Id,
Threads = p.Threads.Count
} by p.BasePriority into g
orderby g.Key descending
select g; foreach(var g in procs) {
Console.WriteLine("Priority {0}", g.Key);
foreach(var p in g)
Console.WriteLine(" {0}", p);
}Read more: Pavel's Blog
//...
var nums2 = nums.FindAll(delegate(int n) {
return n % 2 == 0;
}); 2. Use lambda expressions when delegates are required (this is super-cool): button1.Click += (s, e) => {
MessageBox.Show("This is super-cool!");
};
3. If you’re using a lambda expression that accepts one argument and you don’t need it, provide its name as underscore: ThreadPool.QueueUserWorkItem((_) => {
Console.WriteLine("This is way too cool!");
}); 4. When raising events, the event should be checked to be non-null, but the cool thing to do is always register an empty handler so the check is unnecessary: class Printer {
public event EventHandler PagePrinted = delegate { };
//...
protected virtual void OnPagePrinted() {
PagePrinted(this, EventArgs.Empty); // look ma, no check!
}
} 5. Use LINQ whenever possible, using complex operators if you can:var procs = from p in Process.GetProcesses()
where p.Threads.Count > 15
orderby p.ProcessName
group new {
Name = p.ProcessName,
Id = p.Id,
Threads = p.Threads.Count
} by p.BasePriority into g
orderby g.Key descending
select g; foreach(var g in procs) {
Console.WriteLine("Priority {0}", g.Key);
foreach(var p in g)
Console.WriteLine(" {0}", p);
}Read more: Pavel's Blog