我有一个使用" Any"列表上的方法。
List<String> list = Factory.ReturnList(); //Returns a list of all countries in Europe
我需要验证列表是否包含部分字符串,如&#34;(DE)&#34;和&#34;(FR)&#34;,...
Assert.Equal(list.Any(item=> item.Contains("(DE)")), true);
Assert.Equal(list.Any(item=> item.Contains("(FR)")), true);
Assert.Equal(list.Any(item=> item.Contains("(BE)")), true);
Assert.Equal(list.Any(item=> item.Contains("(NL)")), true);
现在我想把它写成一个函数。我见过其他人使用这样的代码:
Func<IWebElement, bool> condition = item => item.Text == "something";
Assert.Equal(list.Any(condition), true);
我已经尝试了以下内容,但这不起作用:
Func<List<String>, bool> condition = list.Any(x => x.Contains(input));
由于:
Cannot implicitly convert type 'bool' to 'System.Func<System.Collections.Generic.List<string>, bool>'
我怎么能在我的例子中这样做?
&#39;输入&#39;需要是一个参数/变量,因此可以使用不同的参数调用Func
答案 0 :(得分:4)
您当前正在调用该方法并尝试将其分配给您的Func,这当然不起作用,因为您已经调用它,返回bool。
相反,封装两个输入参数并更新Func签名以符合您的意图。
Func<List<String>, string, bool> condition =
(list, input) => list.Any(x => x.Contains(input));
然后您可以像这样调用您的Func:
Assert.Equal(condition(new List<string>(), ""), true);
由于条件不变,这为您提供了最高程度的灵活性和可重用性,但参数可能会发生变化。
答案 1 :(得分:0)
如果您只想要一个lambda表达式,请使用:
Func<List<String>, bool> condition = (list,input) => list.Any(x => x.Contains(input));
答案 2 :(得分:0)
如何将这些字符串放入数组中?
string[] countries = { "DE", "FR", "BE", "NL" };
result = from item in list
where countries.Any(val => item.Contains(val))
select item;