自定义属性以更改属性值

本文关键字:属性 自定义属性 | 更新日期: 2023-09-27 18:21:59

我有一个名为say 的类

Class1
  public string store { get; set; }

我想要的是用这样的东西来装饰它;

Class1
  [GetStoreNumberFromName]
  [IsNumeric]
  public string store {get; set; }

因此,该值可能是1234,也可能是1234 - Store name

我需要做的是检查传递的值中是否只有数字。如果没有,那么在第二个示例中,我需要获取前4个chr,并将属性的值更改为数字。

因此,如果传入的值是1234 - Store Name,那么在[GetStoreNumberFromName]结束时,store的值应该是1234,使得[IsNumeric]将作为有效值通过。

自定义属性以更改属性值

好的。。希望我已经理解你的要求:

class GetStoreNumberFromNameAttribute : Attribute {
}
class Class1 {
    [GetStoreNumberFromName]
    public string store { get; set; }
}
class Validator<T>
{
    public bool IsValid(T obj)
    {
        var propertiesWithAttribute = typeof(T)
                                      .GetProperties()
                                      .Where(x => Attribute.IsDefined(x, typeof(GetStoreNumberFromNameAttribute)));
        foreach (var property in propertiesWithAttribute)
        {
            if (!Regex.Match(property.GetValue(obj).ToString(), @"^'d+$").Success)
            {
                property.SetValue(obj, Regex.Match(property.GetValue(obj).ToString(), @"'d+").Groups[0].Value);
            }
        }
        return true;
    }
}

用法:

var obj = new Class1() { store = "1234 - Test" };
Validator<Class1> validator = new Validator<Class1>();
validator.IsValid(obj);
Console.WriteLine(obj.store); // prints "1234"

显然你需要一些改变。。但它应该给你一个想法(我知道方法命名可能不是最好的..:/)

如果我完全没有抓住要点,请告诉我,我会删除的。