I’m having a List<T> and want get the values back in reverse order. What I don’t want is to reverse the list itself.
This seems like no problem at all since there’s a Reverse() extension method for IEnumerable<T> which does exactly what I want.
My problem is, that there’s also a Reverse() method for List<T> which reverses the list itself and returns void.
I know there are plenty of ways to traverse the list in reverse order but my question is:
How do I tell the compiler that I want to use the extension method with the same name?
var list = new List<int>(new [] {1, 2, 3});
DumpList(list.Reverse()); // error
The best way to explictly bind to a particular extension method is to call it using shared method syntax. In your case, you would do that like:
The problem with some of the other approaches mentioned here is that they won’t always do what you want. For example, casting the list like so:
could end up calling a completely different method depending on the namespaces you have imported, or what type the calling code is defined in.
The only way to be 100% sure you bind to a particular extension method is to use the shared method syntax.