gpt4 book ai didi

c# - 如何重构这个 Linq 函数?

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:46 24 4
gpt4 key购买 nike

我有一个在列表上使用“Any”方法的函数。

List<String> list = Factory.ReturnList(); //Returns a list of all countries in Europe

我需要验证列表是否包含部分字符串,如“(DE)”和“(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>'

如何在我的示例中做到这一点?

'input' 需要是参数/变量,以便可以使用不同的参数调用 Func

最佳答案

您当前正在调用该方法并试图将其分配给您的 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);

这为您提供了最高程度的灵 active 和可重用性,因为条件是恒定的,但参数可以改变。

关于c# - 如何重构这个 Linq 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42677864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com