That sentence is 99% correct.
However, Mono comes to the rescue. My windows 98 box (Windows 98SE, 256MB ram) is running several programs that equire .NET 3.0+. 
-kamahl
Mono is a decent project, but it doesn't have WPF support - that's a big showstopper IMHO.
I do have my own list of issues with .NET, but they are more about the C# language specifically:
- System.Windows.Forms: Why came up with the idea that data (Listboxes specifically [They're wonderful things, all things considered]) should be kept on the control, and not in a database somewhere. And not only that, said data is in a read-only collection.
- Most Collections have no .sort() method.
- The Following code snippet
-kamahl
The first two items on your list are .NET framework, not C#, issues

I don't get your item #1 - nobody (in their right mind) keeps their data in user interface controls... keep it in your model-layer objects, manage lifetime with a persistance layer, and
present the objects in the GUI layer (you can use databinding, or you can shuffle values back and forth manually - your choice).
#2 - not all collections can be sorted efficiently, so it's best not adding the method where it doesn't make sense.
#3 - ugh. You're approaching things wrongly

- exactly how to do things
right depend on whole bunch of things, though. But in general, you'll want to bind your controls to objects (as opposed to string/int/whatever representations of individual properties) and use proper sorting: check out IComparable<T> and IComparer<T> interfaces. There's several ways to handle sorting, and there's more to it than just the sorting itself... for instance, it's often better practice to not sort your object data directly, but bind the GUI element to a filter/sort adapter that constructs the binding collection from it's source collection.