2017-02-16 9 views
0

У меня есть класс, какКак извлечь регулярное выражение из атрибута RegularExpressionAttribute?

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
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, чтобы фактически выполнить проверку на вашем объекте.