One feature I really miss in C# is the ability to define macros. According to the C# team, compile-time replacement macros make code more confusing (they've obviously never seen pascal.h) and more bug prone. What they failed to realize, however, is how incredibly difficult it becomes for people who don't like the C# syntax to redefine their own. Just look at how much trouble the author of this code (found by Jimmy) goes through to get a loop looking like "For i = 1 To 4" ...

/// 
/// The ForTo class avoids confusing syntax of 
/// "for (int i=1;i<=4;i++) {...}". This can be
/// replaced with "foreach (int i in new ForTo(1,4)) {...}".
/// 
public class ForTo : IEnumerable
{
  // Nested IEnumerator
  public class ForToEnumerator : IEnumerator
  {
    private ForTo m_ForTo;

    internal ForToEnumerator(ForTo pForTo) 
    {
      m_ForTo = pForTo;
    }

    // IEnumerator Implementation
    public bool MoveNext() 
    {
      m_ForTo.m_Current += m_ForTo.m_Step;
      return m_ForTo.m_Current <= m_ForTo.m_End;
    }

    public void Reset() 
    {
      m_ForTo.m_Current = m_ForTo.m_Start;
    }

    object IEnumerator.Current
    {
      get { return m_ForTo.m_Current; }
    }
  }

  // Fields to keep track
  private int m_Start;
  private int m_End;
  private int m_Step;
  private int m_Current;

  // Constructors
  public ForTo(int pBegin, int pEnd, int pStep) 
  {
    m_Current = pBegin - 1;
    m_Start = pBegin;
    m_End = pEnd;
    m_Step = pStep;
  }
  public ForTo(int pBegin, int pEnd) : this(pBegin, pEnd, 1) {}

  // IEnumerable Implementation
  IEnumerator IEnumerable.GetEnumerator()
  {
    return new ForToEnumerator(this);
  }
}
UPDATE: Why it's called C-Pound and not C-Sharp.
[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!