我认为我的大脑已经变得油腻,因为我正在努力做一些简单的事情。在我的应用程序中,我有以下代码来配置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知识不如我想的那么好。
我很感激你的帮助。感谢
答案 0 :(得分:60)
lambda表达式只是一个委托,经常映射到Func<T1, T2, ..., TResult>
个变体之一。
Func<T1, TResult> myVar = c => _configuration = c;
用相关类型替换TResult
和T1
。
这可能适合你。
答案 1 :(得分:0)
不确定。假设_configuration
将在您的第一段代码中存储您正在使用的内容。看起来应该是这样的:
return Fluently.Configure().ExposeConfiguration(c => {
c.EventListeners.PostInsertEventListeners = _configuration;
c.EventListeners.PostUpdateEventListeners = _configuration;});
如果编译器存在任何类型的强制转换错误,您始终可以使用:
_configuration.Cast<IPostInsertEventListeners>();
答案 2 :(得分:0)
TResult matchDuplicates (T1 c) => _configuration = c;