我正在使用C#編寫基本屬性/值映射類。如何使用表達式來定位特定成員
我希望能夠針對對象上的特定成員,然後通過lambda表達式指定與該成員有關的各種事情。
的想法是使用靜態方法像這樣來構建一個新的映射:
var myMapping = Mapping<TObject>.New(o => o.MyProperty).Read(GetString);
在這個例子中,TObject的是對象的我要地圖的財產類型,新的(...)定位TObject的'MyProperty'成員,並且Read(...)定義一個表達式,該表達式返回與'MyProperty'相同類型的值。
所以我們現在有一個「映射」對象,它是知道的:
- 什麼成員與它相關聯。
- 如何獲取該成員的值。
然後,我們可以讓邏輯圍繞如何將該成員設置爲該值直到'Mapper'的繼承者。例如某種類型的映射可能需要「驗證」所讀取的值,如果它們有效,則只設置MyProperty。
你會再使用像這樣的映射:
myMapping.Read(myTObject);
其中 'myTObject' 是類型的實例 'TObject的'。
我看到這種類型的東西通常在嘲笑庫如RhinoMock中的實現,您可以在其中定位特定成員併爲其設置選項。
有人能爲我提供一個如何實現這個目標的例子,或者至少告訴我我的頭是否在雲端?
這不完全清楚你想在編譯時發生什麼,以及執行時什麼。現在,'var myMapping =(Func)(o => o.MyProperty);'然後'var s = myMapping(someTOject);'似乎做你想做的事情? –
AakashM
這是你需要的東西http://stackoverflow.com/questions/8990231/how-can-i-create-a-dynamic-select-on-an-ienumerablet-at-runtime/8990465#8990465 – AlanT