I didn't say it did. I said the Array.Find<T>() method provides for your
code to provide an object to compare against. Sorry if my statement was
confusing to you.
http://social.Msdn.microsoft.com/Search/en-US/?query=c# anonymous method
There would be no need to implement an interface with Array.Find<T>(), but
without an anonymous method (or lambda expression, a sort of refinement of
anonymous methods), you would need to use a named method that had access
to the specific data it needed to use. If you knew for sure that you'd
only ever be executing this code in one thread, one search at a time, you
could just put the data in a class member of the class where the search
code resides and refer to it from an instance method you use for the
predicate.
If you couldn't guarantee that, you'd want to create a class containing
the data and with an instance method for the predicate so that you could
refer to the data from the method. That's very roughly what an anonymous
method does, just without all the typing.
With an anonymous method, there's no need. Besides, there are plenty of
other examples of search methods that don't take an object as an argument,
including many of the BinarySearch overloads. Frankly, the number of
times when passing the object as an argument makes the code _clearer_ and
_simpler_ is pretty small. I'm not surprised at all that that's not the
normal pattern, and instead is reserved only for the special cases where
it could be done in a way that supports the simplest use cases.
Pete