如何使用表达式定位特定成员

时间:2012-01-25 11:23:29

标签: c# lambda expression-trees

我正在使用C#来编写基本的属性/值映射类。

我希望能够定位对象上的特定成员,然后通过lambda表达式指定与该成员有关的各种事物。

我们的想法是使用静态方法构建一个新的映射:

var myMapping = Mapping<TObject>.New(o => o.MyProperty).Read(GetString);

在这个例子中,TObject是我要映射其属性的对象的类型,New(...)以TObject的'MyProperty'成员为目标,Read(...)定义一个表达式,该表达式返回一个值是'MyProperty'的相同类型。

所以我们现在有了一个'Mapping'对象,它知道:

  1. 与之相关的成员。
  2. 如何获取该成员的值。
  3. 然后,我们可以将逻辑围绕如何将该成员设置为该值以及“Mapper”的继承者。例如某种类型的映射可能想要“验证”读取的值,只有在它们有效时才设置MyProperty。

    然后您将使用您的映射:

    myMapping.Read(myTObject);
    

    其中'myTObject'是'TObject'类型的实例。

    我在模拟像RhinoMock这样的库中看到了这类事情的实现,你可以在这些库中定位特定成员并为它们设置选项。

    有人可以向我提供一个如何实现这一目标的例子,或者至少告诉我我的头脑是否在云端?

1 个答案:

答案 0 :(得分:0)

您在谈论Key,Value对吗? Linq已经实现了Dictionary<T1, T2>类型。第一种是键,第二种是值。

你可以这样做:

Dictionary<TObject, string> myMapping = new Dictionary(TObject, string);

myMapping.Add(new TObject(), "some string");

阅读它将是:

string someString = myMapping[tObjectInstance].Value;

您可以在此处详细了解字典类及其实现方法:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx