На мой взгляд, у вас есть два варианта без изменения безумных требований.
Вариант 1 - использовать Func<string, T1, bool>
вместо Predicate<T1>
. Таким образом, предикат может преобразовывать между строкой и T1 по мере необходимости и возвращать логический совпадающий результат.
public static T1 SearchAgaistValues<T, T1>(
Dictionary<string, string> input,
string key,
List<T1> values,
Func<string, T1, bool> match,
out string[] cmdParams)
В качестве альтернативы вы можете передать дополнительный параметр Converter<T1, string>
для преобразования искомой строки в T1, а затем сравнить с помощью предиката.
public static T1 SearchAgaistValues<T, T1>(
Dictionary<string, string> input,
string key,
List<T1> values,
Converter<T1, string> converter,
Predicate<T1> match,
out string[] cmdParams)
Хотя оба случая не идеальны. Эта функция больше похожа на проблему, которая ищет решение, чем наоборот. Подпись немного сумасшедшая и кажется, что ее можно значительно упростить, пересмотрев требования или разбив ее на части.