在变量中存储Lambda表达式

时间:2010-12-07 16:32:34

标签: c#

我认为我的大脑已经变得油腻,因为我正在努力做一些简单的事情。在我的应用程序中,我有以下代码来配置Nhibernate(我的问题不是特定于Nhibernate)。

return Fluently.Configure()
    .ExposeConfiguration(c => {
        c.EventListeners.PostInsertEventListeners = new IPostInsertEventListener[] { new LoggingEventListener() };
        c.EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[] { new LoggingEventListener() };
   });

但是我需要将配置(ExposeConfiguration中的内容)存储在私有变量中。我可以做到以下几点:

return Fluently.Configure()
    .ExposeConfiguration(c => _configuration = c);

其中_configuration是私有变量。但这并没有添加我的额外配置选项(EventListeners的东西)。我玩各种各样的东西,但我想我的lambda知识不如我想的那么好。

我很感激你的帮助。感谢

3 个答案:

答案 0 :(得分:60)

lambda表达式只是一个委托,经常映射到Func<T1, T2, ..., TResult>个变体之一。

Func<T1, TResult> myVar = c => _configuration = c;

用相关类型替换TResultT1

这可能适合你。

答案 1 :(得分:0)

不确定。假设_configuration将在您的第一段代码中存储您正在使用的内容。看起来应该是这样的:

return Fluently.Configure().ExposeConfiguration(c => {
c.EventListeners.PostInsertEventListeners = _configuration;
c.EventListeners.PostUpdateEventListeners = _configuration;});

如果编译器存在任何类型的强制转换错误,您始终可以使用:

_configuration.Cast<IPostInsertEventListeners>();

答案 2 :(得分:0)

具有C#7.0本地功能

TResult matchDuplicates (T1 c) => _configuration = c;