繁体   English   中英

Lambda 表达式中的条件语句 c#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM