[英]Conditional Statement inside Lambda Expression c#
我正在尝试通过给定命令从列表中删除字符串。 该命令是删除所有以给定字符串开头或结尾的字符串。
列表输入 = new List() {"Pesho", "Misho", "Stefan"};
string command = "删除 StartsWith P"; 或“删除以 P 结尾”
我正在尝试使用 lambda 来做到这一点。 像这样:
input.RemoveAll(x =>
{
if (command[1] == "StartsWith")
x.StartsWith(command[2]);
else if (command[1] == "EndsWith")
x.EndsWith(command[2]);
});
编译器说:并非所有代码路径都在 Predicate 类型的 lambda 表达式中返回值
我在问是否有可能在一个 lambda 中做到这一点,或者我必须为这两种情况编写它。
lambda 语法是 function。 如果没有{}
大括号,存在的单行将隐式返回其结果,但使用大括号,您需要显式return
:
input.RemoveAll(x =>
{
if (command[1] == "StartsWith")
return x.StartsWith(command[2]);
else if (command[1] == "EndsWith")
return x.EndsWith(command[2]);
else
return false; // You'll need a default too
});
您可以将多个if
语句转换为一个switch
语句,并为每种case
使用一个return
label
input.RemoveAll(x =>
{
switch (command[1])
{
case "StartsWith":
return x.StartsWith(command[2]);
case "EndsWith":
return x.EndsWith(command[2]);
default:
return false;
}
});
如果您可以定位 C# 8,则可以使用switch
表达式进行简化
input.RemoveAll(x =>
{
return command[1] switch
{
"StartsWith" => x.StartsWith(command[2]),
"EndsWith" => x.EndsWith(command[2]),
_ => false
};
});
但是在这两种情况下,您都应该保持default
情况以返回false
值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.