【发布时间】:2017-06-13 14:19:33
【问题描述】:
这是来自编程测试,所以我确信有更好的方法可以做到这一点,但问题需要这个特定的答案。
我有一个 Result 方法,它简单地匹配一个谓词并返回一个布尔值,并且该谓词检查一个字符串数组以报告是否有任何字符串长度超过 5。
static bool Result<T>(T[] values, Func<T, bool> predicate)
{
if (values.Where<T>(predicate).Count() > 0)
return true;
else
return false;
}
static bool StringLengthLessThan5(string str)
{
return str.Length < 5;
}
最后是这样使用的——
bool val2 = Result(new string[5] { "asdf", "a", "asdsffsfs", "wewretete", "adcv" }, StringLengthLessThan5);
这按预期工作,但是现在我需要使用相同类型的代码,但对 Func 进行参数化以允许字符串长度的动态值,即我的 Func<string,bool> 现在需要为 Func<string,int,bool>
static bool StringLengthLessThanGivenNumber(string str,int length)
{
return str.Length < length;
}
或者,
static Func<string, int, bool> FuncForDynamicStringlength = (s, i) => s.Length < i;
我的问题是,本着保持新 Func 的调用代码相同的精神,即我仍然想使用 -
Result(new string[5] { "asdf", "a", "asdsffsfs", "wewretete", "adcv" }, StringLengthLessThanGivenNumber);
但是,如何传递参数?
Func 现在需要 2 个参数,第一个是字符串,第二个是 int,如何传递第一个参数?我可以传递 int 长度进行比较,但我被第一个参数难住了。
我意识到我可以循环遍历我的 string[] 并像这样在 foreach 中调用 Func(我知道这在这个特定实例中没有意义,因为我正在覆盖 bool 的值,但我确定你明白我的问题) -
foreach(string str in new string[5] { "asdf", "a", "asdsffsfs", "wewretete", "adcv" })
{
bool val3_1 = StringLengthLessThanGivenNumber(str, 5);
}
但如果可能的话,我想使用我的原始代码。
【问题讨论】: