2017-02-21 14 views
1

所以我創建了一個類像如何重用屬性

public static class SharedDataAnnotations 
{ 
    /// <summary> 
    /// Matches letters, digits, dashes, underscores and spaces. 
    /// </summary> 
    public static RegularExpressionAttribute DisplayNameProperCharacters = 
     new RegularExpressionAttribute(@"^[A-Za-z0-9\-_ ]+$") { ErrorMessage = "Display name can only contain letters, numbers, underscores, dashes and spaces." }; 
} 

,因爲我希望能夠重用

[RegularExpression("@"^[A-Za-z0-9\-_ ]+$"", ErrorMessage = "Display name can only contain letters, numbers, underscores, dashes and spaces.")] 

然而,當我試圖把它的屬性一樣

[SharedDataAnnotations.DisplayNameProperCharacters] 

我得到錯誤

'SharedDataAnnotations' 不包含一個定義 'DisplayNameProperCharacters'

回答

0

你不行。屬性對象本身需要是它應用於每個代碼元素的新實例。

構建自定義屬性時,您也無法引用非文字值。因此,您無法將對DisplayNameProperCharacters對象的引用傳遞給自定義屬性構造函數。

什麼你可能做的是有自定義屬性需要作爲參數傳遞給它的構造一些標識(如一個字符串,枚舉值等),指定你真正想要什麼樣的行爲(如查找具體RegexExpressionAttribute對象在適當的時候)。

0

屬性必須是一個類型名。根據圖書館正在閱讀的內容,你可以使用接口或基類來裝飾。您也可以將regex值定義爲一個常量字符串以供重用。