C#中的谓词问题

Iam*_*mIC 3 .net c# delegates predicates c#-4.0

我有以下方法定义(EDITED删除冗余通用):

public static T SearchAgaistValues<T>(Dictionary<string, string> input, 
string key, List<T> values, Predicate<T> match, out string[] cmdParams)
Run Code Online (Sandbox Code Playgroud)

我的简化要求如下.我需要寻找inputkey,如果找到,看看它的值出现在values.但是,它values是通用的(显然包含我需要匹配的字符串).因此,我看到它的方式,我必须传递谓词方法来执行匹配.

但是,Predicate<T>我所看到的每个例子都有一个硬编码的比较器.我需要将找到的key's值与每个项目进行比较values.但是,我无法传递这些值.

我无法看到如何使用基于委托的匹配方法在foreach循环之外执行此操作.

我在这里错过了什么吗?

Sam*_*eff 5

在我看来,你有两个选择,没有改变疯狂的要求.

选项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)
Run Code Online (Sandbox Code Playgroud)

或者,您可以传递一个附加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)
Run Code Online (Sandbox Code Playgroud)

但这两种情况都不尽如人意.与其他方式相比,这个功能听起来更像是寻找解决方案的问题.签名有点疯狂,似乎可以通过重新定义要求或将其分解成碎片来大大简化.