jikksm

明白了,你的需求是根据属性`JobNum`的值来动态设置`IsRework`属性的值。我们可以通过自定义特性和反射来实现这一点。以下是具体的实现步骤:

### 1. 定义自定义特性

首先,定义一个自定义特性类,用于标记需要检查的属性:

```csharp
using System;

[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
sealed class ReworkCheckAttribute : Attribute
{
}
```

### 2. 应用自定义特性

然后,将这个自定义特性应用到`JobNum`属性上:

```csharp
public class Job
{
    [ReworkCheck]
    public string JobNum { get; set; }

    public bool IsRework { get; private set; }

    public void CheckReworkStatus()
    {
        var properties = GetType().GetProperties();
        foreach (var property in properties)
        {
            var attribute = (ReworkCheckAttribute)Attribute.GetCustomAttribute(property, typeof(ReworkCheckAttribute));
            if (attribute != null)
            {
                var value = property.GetValue(this) as string;
                if (!string.IsNullOrEmpty(value))
                {
                    IsRework = value.Contains("-r");
                }
                else
                {
                    IsRework = false;
                }
            }
        }
    }
}
```

### 3. 使用反射自动检查属性

你可以在类的构造函数或某个方法中调用`CheckReworkStatus`方法来检查属性值并设置`IsRework`属性:

```csharp
public class Job
{
    [ReworkCheck]
    public string JobNum { get; set; }

    public bool IsRework { get; private set; }

    public Job(string jobNum)
    {
        JobNum = jobNum;
        CheckReworkStatus();
    }

    private void CheckReworkStatus()
    {
        var properties = GetType().GetProperties();
        foreach (var property in properties)
        {
            var attribute = (ReworkCheckAttribute)Attribute.GetCustomAttribute(property, typeof(ReworkCheckAttribute));
            if (attribute != null)
            {
                var value = property.GetValue(this) as string;
                if (!string.IsNullOrEmpty(value))
                {
                    IsRework = value.Contains("-r");
                }
                else
                {
                    IsRework = false;
                }
            }
        }
    }
}
```

### 4. 测试功能

最后,你可以测试这个功能:

```csharp
class Program
{
    static void Main()
    {
        var job1 = new Job("1234-r");
        Console.WriteLine($"JobNum: {job1.JobNum}, IsRework: {job1.IsRework}"); // 输出: JobNum: 1234-r, IsRework: True

        var job2 = new Job("5678");
        Console.WriteLine($"JobNum: {job2.JobNum}, IsRework: {job2.IsRework}"); // 输出: JobNum: 5678, IsRework: False
    }
}
```

通过这种方式,你可以使用自定义特性和反射来动态检查属性值,并根据需要更新`IsRework`属性。这样可以确保当`JobNum`包含`-r`时,`IsRework`属性为`True`,否则为`False`。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值