2010-12-07 4 views
26

Je pense que mon cerveau est devenu frit alors que je me bats pour faire quelque chose de simple. Dans mon application j'ai le code suivant pour configurer Nhibernate (mon problème n'est pas spécifique à Nhibernate). Cependant, j'ai besoin de stocker la configuration (le contenu dans ExposeConfiguration) à l'intérieur d'une variable privée. Je peux effectuer les opérations suivantes:Stockage d'une expression lambda dans une variable

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

Où _configuration est une variable privée. Mais cela n'ajoute pas mes options de configuration supplémentaires (le truc EventListeners). J'ai joué avec diverses choses mais je suppose que ma connaissance de lambda n'est pas aussi bonne que je le pensais.

J'apprécierais votre aide. Merci

+0

Je pense que vous devriez également publier la déclaration (délégué) de ExposeConfiguration , + qu'est-ce que vous voulez sauvegarder dans _configuration (la déclaration aiderait aussi). –

Répondre

44

Une expression lambda est simplement un délégué qui correspond souvent à l'un des Func<T1, T2, ..., TResult> variantes.

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

Remplacement TResult et T1 avec les types pertinents.

Cela pourrait fonctionner pour vous.

+1

+1, mais notez qu'une expression lambda peut correspondre à n'importe quel type de délégué compatible. C'est juste souvent utilisé avec 'Func <>' – JaredPar

+0

Edited ma réponse pour le rendre un peu plus clair. :) –

+0

Super c'est ce que je cherchais. Merci – nfplee

0

Bien sûr. En supposant que _configuration va stocker ce que vous utilisiez dans votre premier bit de code. Il devrait ressembler à ceci:

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

S'il y a toute sorte d'erreurs de la distribution du compilateur, vous pouvez toujours utiliser:

_configuration.Cast<IPostInsertEventListeners>(); 
Questions connexes