2015-02-11 204 views
0

我有一個有很多屬性的類,有些屬性有Browsable屬性。獲取Browsable屬性的所有屬性

public class MyClass 
{ 
    public int Id; 
    public string Name; 
    public string City; 

    public int prpId 
    { 
     get { return Id; } 
     set { Id = value; } 
    } 

    [Browsable(false)] 
    public string prpName 
    { 
     get { return Name; } 
     set { Name = value; } 
    } 

    [Browsable(true)] 
    public string prpCity 
    { 
     get { return City; } 
     set { City= value; } 
    } 
} 

現在使用Reflection,我怎麼能濾除具有Browsable attributes的屬性?在這種情況下,我只需要獲得prpNameprpCity

這是我到目前爲止嘗試過的代碼。

List<PropertyInfo> pInfo = typeof(MyClass).GetProperties().ToList(); 

但這選擇所有的屬性。有沒有什麼辦法可以過濾只有Browsable attributes的房產?

+0

你想擁有可瀏覽所有屬性, 對?或者只有Browsable(true)的那些? – 2015-02-11 15:20:37

+0

所有可瀏覽的屬性@ Selman22 – 2015-02-11 15:27:46

回答

1

您可以使用Attribute.IsDefined方法來檢查Browsable屬性在屬性定義:

typeof(MyClass).GetProperties() 
       .Where(pi => Attribute.IsDefined(pi, typeof(BrowsableAttribute))) 
       .ToList(); 
+1

這也包括'[Browsable(false)]'。 – SLaks 2015-02-11 15:14:26

+1

完美運作。非常感謝兄弟:) @ Selman22 – 2015-02-11 15:33:12

0

要爲[Browsable(true)]唯一成員包括,你可以使用:

typeof(MyClass).GetProperties() 
       .Where(pi => pi.GetCustomAttributes<BrowsableAttribute>().Contains(BrowsableAttribute.Yes)) 
       .ToList(); 
+0

如何獲得標記爲Browsable的列的值爲false。 – Prithiv 2016-12-21 09:21:51