C#模式匹配 关系模式,多个输入

public record Order(int Items, decimal Cost);
public decimal CalculateDiscount(Order order) =>
 order switch
 {
 { Items: > 10, Cost: > 1000.00m } => 0.10m,
 { Items: > 5, Cost: > 500.00m } => 0.05m,
 { Cost: > 250.00m } => 0.02m,
 null => throw new ArgumentNullException(nameof(order), "Can't
calculate discount on null order"),
 var someObject => 0m,
 };

方法的主体是一个switch表达式,根据order的属性值来计算折扣率。具体规则如下:

  1. 如果订单的商品数量大于10且总价大于1000.00,则折扣率为10%(0.10m)。
  2. 如果订单的商品数量大于5且总价大于500.00,则折扣率为5%(0.05m)。
  3. 如果订单的总价大于250.00,则折扣率为2%(0.02m)。
  4. 如果传入的订单为null,则抛出一个ArgumentNullException异常,提示不能对空订单计算折扣。
  5. 对于其他情况(即不满足以上任何条件),折扣率为0%。

最后,CalculateDiscount方法返回计算出的折扣率。

var someObject 在这个上下文中不会创建一个新的对象。这里var someObject仅仅是模式匹配中的一个占位符,用于捕获任何未明确匹配的输入,并指定一个默认的返回值。在C#的模式匹配中,var关键字可以用来表示一个任意的引用类型或值类型的模式,但并不实际创建或初始化任何新的对象或变量。

相关推荐

  1. C#模式匹配 关系模式输入

    2024-07-17 23:58:04       22 阅读
  2. Python 正则表达式:深入解析匹配模式

    2024-07-17 23:58:04       25 阅读
  3. C#实现字符串模糊匹配

    2024-07-17 23:58:04       21 阅读
  4. Rust---模式(Pattern)匹配

    2024-07-17 23:58:04       27 阅读
  5. lua字符串模式匹配

    2024-07-17 23:58:04       26 阅读
  6. Rust编程-模式匹配

    2024-07-17 23:58:04       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 23:58:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 23:58:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 23:58:04       58 阅读
  4. Python语言-面向对象

    2024-07-17 23:58:04       69 阅读

热门阅读

  1. NumPy中np.clip()的用法

    2024-07-17 23:58:04       21 阅读
  2. geojson的数据格式是什么

    2024-07-17 23:58:04       19 阅读
  3. 深入解析JVM内存模型:面试题及详细解答

    2024-07-17 23:58:04       19 阅读
  4. C# 3.数组遍历和储存对象

    2024-07-17 23:58:04       23 阅读
  5. c++初阶知识——类和对象(下)

    2024-07-17 23:58:04       25 阅读
  6. 【Rust】使用日志记录利器flexi_logger

    2024-07-17 23:58:04       18 阅读
  7. Python之爬虫基础

    2024-07-17 23:58:04       19 阅读
  8. C语言12 宏定义、内存

    2024-07-17 23:58:04       21 阅读