Проблема в том, что вы не оцениваете свой предикат, чтобы проверить и проверить, удовлетворен ли предикат. Теперь из вашего вопроса не ясно, хотите ли вы, чтобы предикат проверял ключ или значение. Следующее проверяет ключ. Вы также должны рассмотреть возможность возврата метода bool
, указывающего на успех или неудачу, как я сделал здесь.
static class OrderedDictionaryExtensions {
public static bool Add(
this OrderedDictionary dictionary,
string key,
string value,
Predicate<string> predicate
) {
if (dictionary == null) {
throw new ArgumentNullException("dictionary");
}
if (predicate == null) {
throw new ArgumentNullException("predicate");
}
if (predicate(key)) {
dictionary.Add(key, value);
return true;
}
return false;
}
}
Usage;
// dictionary is OrderedDictionary
dictionary.Add("key", "value", s => s.Length < 5);
Вы можете немного обобщить это, поскольку OrderedDictionary
не является строго типизированным.
static class OrderedDictionaryExtensions {
public static bool Add<TKey, TValue>(
this OrderedDictionary dictionary,
TKey key,
TValue value,
Predicate<TKey> predicate
) {
if (dictionary == null) {
throw new ArgumentNullException("dictionary");
}
if (predicate == null) {
throw new ArgumentNullException("predicate");
}
if (predicate(key)) {
dictionary.Add(key, value);
return true;
}
return false;
}
}
Использование:
// dictionary is OrderedDictionary
dictionary.Add(17, "Hello, world!", i => i % 2 != 0);