如何从RegularExpressionAttribute中提取正则表达式?

时间:2017-02-16 22:24:41

标签: c# .net unit-testing reflection custom-attributes

我有一个像

这样的课程
public class Foo
{
    [RegularExpression(@"([A-Za-z0-9\-_ ]+){1,100}")]
    public string Bar { get; set; }
}

为了进行单元测试,我希望能够提取"@"([A-Za-z0-9\-_ ]+){1,100}"

我知道它像

string expr = typeof(Foo).GetProperty("Bar").....

但我不太清楚如何完成它。

1 个答案:

答案 0 :(得分:1)

var property = typeof(Foo).GetProperty("Bar");
var attribute = property.GetCustomAttribute<RegularExpressionAttribute>();
var expr = attribute?.Pattern;

或单一声明:

var expr = typeof(Foo).GetProperty("Bar")
                      .GetCustomAttribute<RegularExpressionAttribute>()?.Pattern;

注意:我认为您不应该从属性属性中提取数据以进行单元测试。我会留下属性验证进行验收测试。或者使用像Validator类这样的东西来实际运行对象的验证。