I have a C# method which accepts a Predicate<Foo> and returns a list of matching items...

```
public static List<Foo> FindAll( Predicate<Foo> filter )
{
    ...
}

```

The filter will often be one of a common set...

```
public static class FooPredicates
{
    public static readonly Predicate<Foo> IsEligible = ( foo => ...)
    ...
}

```

...but may be an anonymous delegate.

I'd now like to have this method cache its results in the ASP.NET cache, so repeated calls with the same delegate just return the cached result. For this, I need to create a cache key from the delegate. Will Delegate.GetHashCode() produce sensible results for this purpose? Is there some other member of Delegate that I should look at? Would you do this another way entirely?