一个重构该LINQ功能如何



我有一个函数,该函数使用列表上的"任何"方法。

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;

最新更新