自定义属性来更改属性值(Custom attribute to change property va

2019-10-29 15:42发布

我有一类叫做说

Class1
  public string store { get; set; }

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

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

所以值可能是1234 ,也可能是1234 - Store name

我需要做的是检查是否传递的值在它只有数字。 如果它不那么我需要在第二个例子中,抢前4个CHRS和更改的属性给的值。

因此,如果在价值传递的是1234 - Store Name ,然后在结束[GetStoreNumberFromName]的值store应该是1234 ,这样[IsNumeric]将通过为有效。

Answer 1:

好吧..希望我理解你的要求:

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"

..obviously需要在您的最终一些变化..但它应该给你一个想法(我知道,方法命名可能不是最好的..:/)

如果我错过了点完全让我知道,我会删除。



文章来源: Custom attribute to change property value