首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有关系模式的C# 9新的“嵌套切换表达式”

具有关系模式的C# 9新的“嵌套切换表达式”
EN

Stack Overflow用户
提问于 2020-11-20 18:48:08
回答 1查看 649关注 0票数 3

https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/#relational-patterns中有一个使用“嵌套切换表达式”的例子:

代码语言:javascript
复制
DeliveryTruck t when t.GrossWeightClass switch
{
    > 5000 => 10.00m + 5.00m,
    < 3000 => 10.00m - 2.00m,
    _ => 10.00m,
},

而不是:

代码语言:javascript
复制
    DeliveryTruck t when t.GrossWeightClass > 5000 => 10.00m + 5.00m,
    DeliveryTruck t when t.GrossWeightClass < 3000 => 10.00m - 2.00m,
    DeliveryTruck _ => 10.00m,

但是我不能让它工作..。我的完整代码:

代码语言:javascript
复制
public class DeliveryTruck {
    public int GrossWeightClass { get; set; }
}

public class Class1 {
    public decimal CalculateTollOriginal(object vehicle) =>
        vehicle switch
        {
            DeliveryTruck t when (t.GrossWeightClass > 5000) => 10.00m + 5.00m,
            DeliveryTruck t when (t.GrossWeightClass < 3000) => 10.00m - 2.00m,
            DeliveryTruck t => 10.00m,

            { } => throw new System.ArgumentException(message: "Not a known vehicle type", paramName: nameof(vehicle)),
            null => throw new System.ArgumentNullException(nameof(vehicle))
        };

    public decimal CalculateTollNestedSwitch(object vehicle) =>
        vehicle switch
        {
            DeliveryTruck t when t.GrossWeightClass switch
            {
                > 5000 => 10.00m + 5.00m,
                < 3000 => 10.00m - 2.00m,
                _ => 10.00m,
            },

            { } => throw new System.ArgumentException(message: "Not a known vehicle type", paramName: nameof(vehicle)),
            null => throw new System.ArgumentNullException(nameof(vehicle))
        };

}

我在使用dotnet 5.0.100时遇到了编译错误:

代码语言:javascript
复制
C:\Users\pkruk\source\repos\CSharp9\PatternMatching2_NestedSwitch.cs(29,14): error CS1003: Syntax error, '=>' expected [C:\Users\pkruk\source\repos\CSharp9\CSharp9.csproj]
C:\Users\pkruk\source\repos\CSharp9\PatternMatching2_NestedSwitch.cs(29,14): error CS1525: Invalid expression term ',' [C:\Users\pkruk\source\repos\CSharp9\CSharp9.csproj]

我做错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-21 12:02:50

你需要的是

代码语言:javascript
复制
public decimal CalculateTollNestedSwitch(object vehicle) => vehicle switch
{
    DeliveryTruck t => t.GrossWeightClass switch
    {
        > 5000 => 10.00m + 5.00m,
        < 3000 => 10.00m - 2.00m,
        _ => 10.00m,
    },

    { } => throw new System.ArgumentException(message: "Not a known vehicle type", paramName: nameof(vehicle)),
    null => throw new System.ArgumentNullException(nameof(vehicle))
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64928104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档