Multiple return values. "out" and "ref" is unreadable compared to returning tuples.
Better support for immutability, just like Jon said. Right now immutability on classes are possible due to human discipline.
But the most lacking feature is a solid collection framework designed around immutability.
In my current project I anticipated immutability would be a big win, and it was, but the collection framework is a horrible match.
For example, say you want to add an employee to a company, like
public Company AddEmployee(Employee employee)
{
var newEmployeeList = new List(EmployeeList);
newEmployeeList.Add(employee);
return new Company(newEmployeeList.AsReadOnly(), ....)
}
just isn't very performant or nice to implement.
At one point, I even considered making my own collections starting with a simple immutable Cons class. :)
On the other hand, Linq worked out very nice for us. I really like the methods it introduces. I found the special Linq syntax not in my taste.
EDIT: I've too low rank to comment so I'll reply to Jon's comment here. Jon, I decided it was a bad idea due to maintainability. The people that will maintain this project over the next decade probably don't have much Lisp/functional programming exposure. That reminds me of another thing. I wonder how many months of maintenance it will take before my immutable objects become mutable. (Disclaimer, IT business being something of a gold rush era at times I'm painfully aware that many developer don't even get what features like immutable and closures are.)