2010-11-05 35 views
2

我发现自己在我的C#应用​​程序中越来越多地使用lambda表达式。最常见的情况是使用表达式< Func <对象> >消除对属性名称的魔术字符串引用。例如,我可以有一个方法,例如:抽象lambda表达式的建议

public void SomeFunction(Expression<Func<Object>> expression) 
{ ... } 

我可以调用该方法为:

SomeFunction(() => SomeProperty); 

处理该表达式的方法中的逻辑是在每个实现几乎相同迄今其让我考虑一种方法将这个提取到可重用组件中。有没有人做过这个?我应该注意的任何潜在的陷阱?

回答

0

嗯,是的,没有。最大的区别是用于填充字典的推理。 (我同意大多数响应这一职务的,不喜欢它在这种情况下使用。)在这里,我只是使用表达式中的属性的引用来传递,而不是传递一个神奇的字符串包含属性名称。

而且,我最初的实现实际上直接从微软博客来了!在那种情况下,我使用这个的一个实例是在我的RaisePropertyChanged方法中。使用表情,我可以打电话:

RaisePropertyChanged(() => MyProperty); 

代替:

RaisePropertyChanged("MyProperty"). 

恕我直言,这使得代码更可靠,更易于维护,因为我得到的类型检查在编译时/验证,所以我会知道立即如果有人已更改名称或从调用对象中移除属性。

我的问题是,我用同样的方法在其他一些地方也找到,我复制用于处理表达的逻辑。我已经考虑创建一个从表达<衍生Func键<对象> >和使用,作为类型,每当我想这种行为一个新的类,但我知道有很多在引擎罩与表达,拉姆达的等人,所以我会就像有些人相信我不会打开Pandora's Box做这件事。