注意:這是對previous question上的answer的後續操作。使用反射通過從設置者調用的方法獲取屬性的屬性
我正在用一個名爲TestMaxStringLength
的屬性裝飾一個屬性的setter,該屬性在setter調用的方法中用於驗證。
該物業目前看起來是這樣的:
public string CompanyName
{
get
{
return this._CompanyName;
}
[TestMaxStringLength(50)]
set
{
this.ValidateProperty(value);
this._CompanyName = value;
}
}
但我寧願它是這樣的:
[TestMaxStringLength(50)]
public string CompanyName
{
get
{
return this._CompanyName;
}
set
{
this.ValidateProperty(value);
this._CompanyName = value;
}
}
爲ValidateProperty
的代碼,負責查找的屬性設置器:
private void ValidateProperty(string value)
{
var attributes =
new StackTrace()
.GetFrame(1)
.GetMethod()
.GetCustomAttributes(typeof(TestMaxStringLength), true);
//Use the attributes to check the length, throw an exception, etc.
}
如何更改ValidateProperty
代碼尋找屬性屬性而不是設置方法?
哦。從編碼的角度來看,我更喜歡這種方法。當然,除非實現驗證,否則屬性修飾是無用的,在這個模型中稍微難以假設,但總體而言,它應該更快更乾淨。 – 2010-09-02 16:41:19
你能告訴我如何驗證這個值與atts的對應關係嗎?謝謝! – VladL 2013-11-06 15:40:34