2014-03-07 22 views
1

這似乎應該很簡單,但我缺少一些東西。如何在一個對象的實例中獲取某個類型的所有值/成員

我有這樣一個類:

class DataObject 
{ 
    public MyEnum Member1 {get; set;} 
    public MyEnum Member2 {get; set;} 
    public MyEnum Member3 {get; set;} 
    public MyEnum Member4 {get; set;} 
    public MyEnum Member5 {get; set;} 
    public char Member6 {get; set;} 
} 

和保持該類的一個實例的類。從該對象中,我想獲得該實例中所有MyEnum成員值的列表(即List<MyEnum>),以便我可以檢查所有這些值,而無需再次鍵入每個名稱。

GetProperties只是返回所有的屬性(我認爲我可以用typeof做一個Where查詢)。

完成此操作的正確方法是什麼?

回答

3

你可以得到你的屬性是這樣的:

var properties = typeof (DataObject) 
       .GetProperties(BindingFlags.Instance | BindingFlags.Public) 
       .Where(x => x.PropertyType == typeof (MyEnum)); 

然後就可以調用GetValue方法爲您的每一個DataObject實例,並填充List<MyEnum>

舉例來說,如果你有一個List<DataObject>你可以填充你的List<MyEnum>是這樣的:

var objectList = new List<DataObject>(); 
var enumValues = new List<MyEnum>(); 
foreach (var obj in objectList) 
{ 
    foreach (var prop in properties) 
    { 
     enumValues.Add((MyEnum)prop.GetValue(obj)); 
    } 
} 

你沒有提供th E的其他類,但如果DataObject是另一個類的屬性,那麼你就可以得到所有DataObjectsLINQ這樣的:

var objectList = otherList.Select(x => x.DataObject).ToList(); 
+0

完美地工作!謝謝您的幫助。 – BradleyDotNET

相關問題