2010-11-05 6 views
2

Je me retrouve à utiliser de plus en plus les expressions lambda dans mes applications C#. Le cas le plus courant consiste à utiliser l'expression < Func <objet> > pour éliminer les références de chaîne magique aux noms de propriété. Par exemple, je peux avoir une méthode telle que:Suggestions pour l'abstraction des expressions lambda

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

je peux appeler la méthode que:

SomeFunction(() => SomeProperty); 

La logique dans la méthode qui gère l'expression est presque identique dans chaque mise en œuvre jusqu'à présent qui A moi d'envisager un moyen d'extraire cela en un composant réutilisable. Est-ce que quelqu'un a fait ça? Y a-t-il des pièges potentiels dont je devrais être au courant?

Répondre

0

Eh bien, oui et non. La grande différence est l'inférence utilisée pour remplir un dictionnaire. (Je suis d'accord avec la plupart des réponses à cet article et n'aime pas son utilisation dans ce cas.) Ici, j'utilise simplement l'expression pour passer dans une référence à une propriété plutôt que de passer dans une chaîne magique contenant la propriété prénom.

Et, ma mise en œuvre initiale est venue directement d'un blog de Microsoft! Dans ce cas, et l'une des instances où j'utilise ceci, se trouve dans ma méthode RaisePropertyChanged. En utilisant l'expression, je peux appeler:

RaisePropertyChanged(() => MyProperty); 

au lieu de:

RaisePropertyChanged("MyProperty"). 

à mon humble avis, ce qui rend le code plus fiable et maintenable que je reçois le type de vérification/validation au moment de la compilation que je sache immédiatement si quelqu'un a changé le nom ou supprimé une propriété de l'objet appelant. Mon problème est que j'utilise cette même approche dans quelques autres endroits et trouve que je suis en train de dupliquer la logique utilisée pour gérer l'expression. J'avais envisagé de créer une nouvelle classe dérivée de Expression < Func <Object> > et de l'utiliser comme type chaque fois que je veux ce comportement, mais je sais qu'il y a beaucoup de sous-le-capot avec des expressions, lambda et al donc je le ferais comme une certaine confiance que je ne vais pas ouvrir la boîte de Pandore en faisant cela.