2014-12-03 44 views
1
public sealed class test<T> : IEnumerable<T> where T : new() 
{ 
    public sealed class Ignore : Attribute { } 
}  

public class test_2 
{ 
    [ ???? ] 
    string helllo; 
} 

有沒有方法從test<T>類之外訪問屬性? 我似乎無法找到一個。通用類中創建的自定義屬性

+0

我相信你的類需要被稱爲IgnoreAttribute才能正常工作。 – pquest 2014-12-03 13:44:20

+1

'[test .Ignore]'。你必須爲'T'指定一個類型。這是因爲類型參數「T」可用於嵌套類型,即使您的屬性不使用它。 – vcsjones 2014-12-03 13:44:28

+2

這變得非常尷尬 - 爲什麼在泛型類中有一個非泛型屬性?把屬性放在類裏並不是很好的做法 – Rhumborl 2014-12-03 13:46:11

回答

1

C#不支持通用屬性。 我知道你的屬性不是通用的,但我想你希望它在該通用類中使用T屬性級別,這使得屬性通用(你會得到不同的每個T的忽略類型)

不幸的是,在C#中實現這一點。 Why does C# forbid generic attribute types?

從評論更新: 您可以在命名空間的範圍內具有Ignore屬性。您可以對test<T>進行思考並查找具有「忽略」屬性的屬性。

public sealed class Ignore : Attribute { } 

public sealed class test<T> : IEnumerable<T> where T : new() 
{ 
    [Ignore] 
    public test_2 SomeProperty { get; set; } 
} 


public class test_2 
{ 
    [Ignore] 
    public string TestData { get; set; } 
} 
+0

'公共密封類測試:IEnumerable的其中T:新的() { 公共密封類忽略:屬性{} } 公共類test_2 { [試驗結尾。可以忽略] 串helllo; }' 其實不是,在T是屬性完全不感興趣,他們甚至不會永遠是相互靠近代碼:d 屬性僅僅是識別瓦爾通過的'測試反射被忽略' – 2014-12-03 14:14:55

+0

是的,但如果你願意的話,你可以這樣做。 C#不支持這種方式來避免這種複雜性。如果他們不相關,爲什麼你想把這個屬性放在那個類裏? – bbeda 2014-12-03 14:25:54

+0

該屬性與'test '有關,這就是爲什麼我想要它在那裏,但其他類需要它,以便用戶可以指定要被忽略的變量'test ' – 2014-12-03 14:34:19

相關問題