I recently attended a meeting of the Dallas C# SIG, a group which I hadn't attended in quite some time, because they had Adam Keys come in to talk about Ruby. I don't live under a rock, so I've heard the buzz about Ruby but I hadn't spent much time looking into it because it wasn't immensely relevant to my day to day. That said, this was a great chance to learn so I checked out the meeting and I must admit, I was impressed. I'm hardly a convert but I can understand Adam's point that Ruby "feels" more enjoyable to write for him.
While most things Ruby can do I think C# 3.0 has well in hand, there still some things C# can't do yet. The dynamic augmentation of an instance, not a type, is intriguing to me and certainly powerful. One feature that I thought was interesting, and immediately doable in C# 3.0 was the way Ruby can handle loops. For instance take this Ruby code (syntax errors possible, this is not checked) :
I like this much better than the standard C# syntax of a For loop because it focuses on what is important. Its terse yet clear, and I wanted in C# 3.0 right now, so here it is:
This results in a very nice piece of C# code, equivalent to our Ruby example above:
Simply enough to implement, and a great example of using Lambda expressions and extension methods to improve the readability of your code.