我有一个函数,该函数使用列表上的"任何"方法。
List<String> list = Factory.ReturnList(); //Returns a list of all countries in Europe
我需要验证列表是否包含诸如"(de)"one_answers"(fr)"的部分字符串,...
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>'
在我的示例中我该怎么做?
'输入'需要是一个参数/变量,因此可以使用不同的参数调用func
您当前正在调用该方法,并试图将其分配给您的功能,这当然不起作用,因为您已经调用了它,返回了bool。
而是封装两个输入参数并更新func签名以匹配您的意图。
Func<List<String>, string, bool> condition =
(list, input) => list.Any(x => x.Contains(input));
您可以这样调用您的功能:
Assert.Equal(condition(new List<string>(), ""), true);
这为您提供了最高的灵活性和可重复性,因为条件是恒定的,但是参数可以更改。
如果您只想要lambda表达式,请使用:
Func<List<String>, bool> condition = (list,input) => list.Any(x => x.Contains(input));
将这些字符串放入数组中怎么样?
string[] countries = { "DE", "FR", "BE", "NL" };
result = from item in list
where countries.Any(val => item.Contains(val))
select item;