C# C语言中的谓词问题#

C# C语言中的谓词问题#,c#,.net,c#-4.0,delegates,predicates,C#,.net,C# 4.0,Delegates,Predicates,我有以下方法定义(编辑以删除多余的泛型): public static T SearchAgaistValues(字典输入, 字符串键、列表值、谓词匹配、输出字符串[]cmdParams) 我的简化要求如下。我需要在input中搜索键,如果找到,请查看其值是否出现在值中。但是,值是通用的(并且显然包含我需要匹配的字符串)。因此,在我看来,我必须传递一个谓词方法来执行匹配 然而,我看到的每个谓词的例子都有一个硬编码的比较器。我需要将找到的键的值与值中的每个项进行比较。但是,我无法传递这些值 我看

我有以下方法定义(编辑以删除多余的泛型):

public static T SearchAgaistValues(字典输入,
字符串键、列表值、谓词匹配、输出字符串[]cmdParams)
我的简化要求如下。我需要在
input
中搜索
,如果找到,请查看其值是否出现在
中。但是,
是通用的(并且显然包含我需要匹配的字符串)。因此,在我看来,我必须传递一个谓词方法来执行匹配

然而,我看到的每个
谓词的例子都有一个硬编码的比较器。我需要将找到的
键的
值与
值中的每个项进行比较。但是,我无法传递这些值

我看不出如何使用基于委托的匹配方法在foreach循环之外实现这一点


我在这里遗漏了什么吗?

在我看来,您有两个选择,而不会改变疯狂的需求

选项1是使用
Func
而不是
谓词
。这样,谓词可以根据需要在字符串和T1之间转换,并返回布尔匹配结果

public static T1 SearchAgaistValues<T, T1>(
            Dictionary<string, string> input, 
            string key, 
            List<T1> values, 
            Func<string, T1, bool> match, 
            out string[] cmdParams)
公共静态T1 SearchAgaistValue(
字典输入,
字符串键,
列出值,
Func match,
输出字符串[]cmdParams)
或者,您可以传递一个附加的
Converter
参数,将查找的字符串转换为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)
公共静态T1 SearchAgaistValue(
字典输入,
字符串键,
列出值,
转换器,
谓词匹配,
输出字符串[]cmdParams)

不过,这两种情况都不太理想。这个函数听起来更像是一个寻找解决方案的问题,而不是相反。签名有点疯狂,似乎可以通过重新列出需求或将其分解为若干部分来大大简化签名

这里类型参数T的意义是什么?另外,如果
是一个通用列表,但将包含一个需要匹配的字符串,您的意思是需要匹配
中对象的字符串属性,还是什么?请澄清。“然而,值是通用的(显然将包含一个我需要匹配的字符串)。”我需要完全匹配您所说的内容。它一开始是天真的,但有点复杂,后来发展到想要学习如何正确地执行。在这种情况下,也许最好不要太笼统。
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)