Return a key when a function returns true
Needs more LINQ:

return classifications.FirstOrDefault(item =&gt; item.Value.Invoke(input)).Key;


This has the advantage (IMO) of highlighting the fact that you're discarding all but the first match (note that iteration order is not guaranteed!).

Classify doesn't really convey the fact that you're returning a Key from a dictionary. Seems FindKey would be a much better name.

A generic extension method seems like a good idea -  call your source source, and stick to TKey and TValue:

public static TKey FindKey&lt;TKey, TValue&gt;(this IDictionary&lt;TKey, Func&lt;TValue, bool&gt;&gt; source, TValue input)
{
    return source.FirstOrDefault(item =&gt; item.Value.Invoke(input)).Key;
}


That one-liner makes use of the fact that KeyValuePair&lt;TKey,TValue&gt; is a struct (and therefore can't be null), so you can just return .Key and that will be default(TKey).