明白了,你的需求是根据属性`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`。