2010-08-30 5 views
7

Existe-t-il un moyen en C# de référencer un constructeur de classe en tant que fonction standard? La raison en est que Visual Studio se plaint de modifier les fonctions avec lambdas, et souvent c'est une simple instruction select. Par exemple var ItemColors = selectedColors.Select (x => new SolidColorBrush(x));, où selectedColors est simplement IEnumerable<System.Windows.Media.Color>.Appel du constructeur en tant que fonction dans C#

Techniquement, le lambda ne devrait-il pas être redondant? select prend une fonction acceptant un type T et retournant le type U. Le pinceau de couleur unie prend (le correct) le type T ici et renvoie un U. Seulement je ne vois pas de moyen de le faire en C#. En F # ce serait quelque chose comme let ItemColors = map selectedColors (new SolidColorBrush).

TL; DR: Je suppose que je cherche la forme valide de var ItemColors = selectedColors.select (new SolidColorBrush) qui n'a pas besoin d'un lamba. Est-ce possible en C# ou est-ce que le langage n'a aucun moyen d'exprimer cette construction?

Répondre

6

Non, vous ne pouvez pas référencer un constructeur C# en tant que groupe de méthodes et le transmettre en tant que paramètre délégué. La meilleure façon de le faire est via la syntaxe lambda dans votre question.

0

Je ne suis pas sûr de vous avoir bien compris. Mais parlez-vous d'un factory? De cette façon, vous pouvez transmettre une valeur à l'usine et créer une instance pour vous.

SolidColorBrush brush = ColorBrushFactory.BrushFrom(color); 

Espérons que cela a aidé.

+0

Il essaie de créer une instance de délégué d'un cteur normal. – SLaks

6

Vous pouvez disposer d'une méthode formelle:

private static SolidColorBrush Transform(Color color) 
{ 
    return new SolidColorBrush(color); 
} 

Ensuite, vous pouvez utiliser Select comme ceci:

var ItemColors = selectedColors.Select(Transform); 
+0

+1, C'est un modèle de construction que j'ai beaucoup aimé récemment, en particulier pour la fausse immuabilité, et dans les classes de base qui appellent des méthodes sur leurs implémenteurs depuis le static Create(). –

Questions connexes