2015-03-13 32 views
1

我想按其屬性排序List(Of MyDynamicObject),其中MyDynamicObjectExpandoObject。我有屬性名稱作爲字符串,所以我需要使用某種反射來傳遞它們。對使用​​反射的屬性對ExpanoObejct的列表進行排序

比方說,我有一個列表:

MyList = New List(Of Entry) 

其中Entry有一個屬性MyProperty_01
現在我想按對象屬性MyProperty_01排序MyList

在靜態對象和無反射的情況下,我會做這樣的事情的:

MyList = MyList.OrderBy(Function(x) x.MyProperty_01).ToList 

現在,如果我需要通過屬性的字符串名字,我可以這樣做:

Dim MyPropertyName As String = "MyProperty_01" 
MyList = MyList.OrderBy(Function(x) GetType(Entry).GetProperty(MyPropertyName).GetValue(x)).ToList 

其中Entry是對象類的參考。

我該如何用ExpandoObject做到這一點?如果是ExpandoObject,我沒有類參考。

所以這不起作用了。

Dim MyPropertyName As String = "MyProperty01" 
MyList = MyList.OrderBy(Function(x) GetType().GetProperty(MyPropertyName).GetValue(x)).ToList 

回答

1

這是一種可能的方式,但不使用反射。由於ExpandoObject實現IDictionary(Of String, Object).Item接口,可以通過屬性名字符串投的對象來表示接口類型和訪問屬性,就像你在相應的字符串鍵從字典訪問值:

Dim MyPropertyName As String = "MyProperty01" 
MyList = MyList.OrderBy(Function(x) CType(x, IDictionary(Of String, Object))(MyPropertyName)).ToList 
+0

聰明的解決方案!謝謝! – 2015-03-13 09:59:38

相關問題