12
votes

Constructeur d'appel en fonction de C #

Y a-t-il un moyen de faire référence à un constructeur de classe comme une fonction standard? La raison en est que Visual Studio se plaint de modifier les fonctions avec des Lambdas, et souvent de sa déclaration de sélection simple.

Par exemple Var ItemColors = SelectedColors.Sélectionnez (x => Nouveau SolidColorBrush (x)); , où sélectionneursColors n'est qu'un ienumerable .

Techniquement parler, le Lambda ne devrait-il pas être redondant? Sélectionner une fonction accepte un type T et le type de retour U. La brosse de couleur unie prend (le bon) Tapez (le bon) T est ici et retourne une U. Je ne vois aucun moyen de le faire en C #. Dans F # Ce serait quelque chose comme let itemColors = Carte sélectionnéeColors (nouveau SolidColorBrush) .

TL; DR: Je suppose que je suis à la recherche de la forme valide de Var itemColors = SelectedColors.Sélectionnez (Nouveau SolidColorBrush) Qui ne nécessite pas de Lamba. Est-ce possible dans C # ou la langue n'a aucun moyen d'exprimer cette construction?


2 commentaires

Problème pertinente ouverte github.com/dotnet/csharplang/issues/2846


Cette question a été posée à nouveau, six ans plus tard, ici: Stackoverflow.com/q/44127501/773113 Je n'appellerais pas que Question Un duplicata de celui-ci, car cette question a été formulée de manière plus directe, pertinente et compréhensible.


3 Réponses :


10
votes

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


0 commentaires

0
votes

Je ne suis pas sûr de vous comprendre correctement. Mais parlez-vous d'un usine code>?

De cette façon, vous pouvez transmettre une valeur à l'usine et créera une instance pour vous. P>

SolidColorBrush brush = ColorBrushFactory.BrushFrom(color);


1 commentaires

Il essaie de créer une instance de délégation d'un CTOR normal.



7
votes

Vous pouvez poser une méthode formelle: xxx

alors vous pouvez utiliser sélectionner comme ceci: xxx < / p>


1 commentaires

+1, il s'agit d'un modèle de construction que j'ai grandi pour aimer beaucoup ces derniers temps, en particulier pour la fausse immuabilité et dans les classes de base qui appellent des méthodes sur leurs implémentations de la création statique ().