if(a is B{ bb : a})又是什么?

模式匹配(pattern matching)是 C# 中的一种强大功能,允许你在检查对象类型的同时提取属性。`if (a is B { bb: a })` 的意思是检查对象 `a` 是否是类型 `B`,并且如果是,将其属性 `bb` 的值赋给变量 `a`。

以下是一个完整的控制台应用程序示例,演示如何使用这种模式匹配:

```csharp
using System;

namespace PatternMatchingDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            object obj1 = new A { aa = 10 };
            object obj2 = new B { bb = 20 };

            CheckObject(obj1);
            CheckObject(obj2);
        }

        static void CheckObject(object obj)
        {
            if (obj is A { aa: var aaValue })
            {
                Console.WriteLine($"Object is of type A with aa = {aaValue}");
            }
            else if (obj is B { bb: var bbValue })
            {
                Console.WriteLine($"Object is of type B with bb = {bbValue}");
            }
            else
            {
                Console.WriteLine("Object is of an unknown type");
            }
        }
    }

    class A
    {
        public int aa { get; set; }
    }

    class B
    {
        public int bb { get; set; }
    }
}
```

### 解释

1. **`A` 类和 `B` 类**:
    - `A` 类包含一个 `aa` 属性。
    - `B` 类包含一个 `bb` 属性。

2. **`Main` 方法**:
    - 创建两个对象 `obj1` 和 `obj2`,分别为类型 `A` 和 `B` 的实例。
    - 调用 `CheckObject` 方法来检查每个对象的类型。

3. **`CheckObject` 方法**:
    - 使用模式匹配检查 `obj` 是否是类型 `A`,如果是,则提取其 `aa` 属性值并赋给变量 `aaValue`。
    - 使用模式匹配检查 `obj` 是否是类型 `B`,如果是,则提取其 `bb` 属性值并赋给变量 `bbValue`。
    - 如果对象不属于类型 `A` 或 `B`,输出未知类型的消息。

### 示例运行结果

```
Object is of type A with aa = 10
Object is of type B with bb = 20
```

### 关键点总结

- **`if (obj is A { aa: var aaValue })`**:
    - 检查 `obj` 是否是类型 `A`。
    - 如果是,将 `A` 的 `aa` 属性的值赋给变量 `aaValue`。
- **`if (obj is B { bb: var bbValue })`**:
    - 检查 `obj` 是否是类型 `B`。
    - 如果是,将 `B` 的 `bb` 属性的值赋给变量 `bbValue`。

通过这种方式,你可以在一个条件语句中同时进行类型检查和属性提取,使代码更加简洁和易读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值