C# expressions lambda comme arguments de la fonction

J'ai été très occupé plongée dans les expressions lambda récemment, et il y a quelques fonctionnalités spécifiques que j'ai eu l'intention d'apprendre, mais ne pouvaient tout simplement pas l'impression de faire des têtes ou queues de.

Supposons que j'ai une suite logique dans mon code:

List<A> foo; //assuming this is populated
string[] bar = foo.Select<A,string>(x => x.StringProperty).ToArray<string>();

Maintenant, je veux peut-être abstraite que l'ensemble de l'opération dans une méthode de gestionnaire, de sorte que je peux faire ceci à la place:

string[] bar = MakeArray<A,string>(foo, x => x.StringProperty);
int[] foobar = MakeArray<A,int>(foo, x => x.IntegerProperty);

Comment m'y prendre avec l'écriture de cette méthode corps? Je prévois de déclarer la signature en tant que quelque chose comme:

U[] MakeArray<T,U>( /* some lambda magic? */ ) where T : IEntity {}

mais je ne sais pas comment spécifier que j'attends d'une expression lambda que l'argument de méthode, et comment cela se traduit exactement dans le corps de la méthode.

Quelqu'un peut-il me montrer comment créer le MakeArray() fonction ci-dessus? Je suis assez sûr qu'une fois que je vois comment c'est fait, que je peux le ramasser à partir de là.

MODIFIER

Comme l'a souligné dans les commentaires, MakeArray() besoin d'une référence à la IEnumerable<>. Mis à jour pour refléter ce fait.

  • FWIW l'implicite de la nature des médicaments génériques pouvez ajouter un lisible de la valeur à votre code en n'ayant pas à déclarer explicitement le type avec chacun des énoncés, ce qui pourrait être subjectif bien. La déclaration suivante est égal à votre premier select.. string[] bar = foo.Select(x => x.StringProperty).ToArray();
  • Si vous vous trouvez à l'aide de tableaux partout dans votre code, vous pouvez envisager de refactoring en IEnumerable<T> ou IList<T>. Alors rien de tout cela sera nécessaire. Aussi, n'est-ce pas MakeArray besoin d'une référence à toto?
  • Ouais, j'ai un peu de tout comme les génériques ont déclaré explicitement (le cas échéant) juste si c'est clair ce que je suis en tirant. Vous avez raison cependant.
  • nah, le tableau est juste pour illustrer. Mais, je vois votre point de bien!