Someone on my team tried fixing a \'variable not used\' warning in an empty catch clause.
try { ... } catch (Exception ex) { }
-> gives a w
It's not really the job of a compiler to work out every single instance and corner case when a variable may or may not be used. Some are easy to spot, some are more problematic. Erring on the side of caution is the sensible thing to do (especially when warnings can be set to be treated as errors - imagine if software didn't compile just because the compiler thought you weren't using something you were). Microsoft Compiler team specifically say:
"...our guidance for customers who are interested in discovering unused elements in their code is to use FxCop. It can discover unused fields and much more interesting data about your code."
-Ed Maurer, Development Lead, Managed Compiler Platform