如何使用表达式来针对特定成员

本文关键字:成员 何使用 表达式 | 更新日期: 2023-09-27 18:21:17

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

我希望能够针对对象上的特定成员,然后通过lambda表达式指定要对该成员执行的各种操作。

这个想法是使用静态方法构建一个新的映射,类似于

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

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

所以我们现在有一个"映射"对象,它知道:

  1. 它与哪个成员关联
  2. 如何获取该成员的值

然后,我们可以将如何将该成员设置为该值的逻辑留给"Mapper"的继承者。例如,某一类型的映射可能希望"验证"读取的值,仅在有效的情况下设置MyProperty。

然后你可以这样使用你的地图:

myMapping.Read(myTObject);

其中"myTObject"是类型为"TOobject"的实例。

我在RhinoMock这样的模拟库中经常看到这种东西的实现,在那里你可以针对特定的成员并为他们设置选项。

有人能为我提供一个如何实现这一目标的例子吗?或者至少告诉我我是否陷入了困境?

如何使用表达式来针对特定成员

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

你可以做:

Dictionary<TObject, string> myMapping = new Dictionary(TObject, string);
myMapping.Add(new TObject(), "some string");

阅读它将是:

string someString = myMapping[tObjectInstance].Value;

您可以在此处阅读有关dictionary类以及如何实现它的更多信息:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx