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. p>
Par exemple 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 TL; DR: Je suppose que je suis à la recherche de la forme valide de Var ItemColors = SelectedColors.Sélectionnez (x => Nouveau SolidColorBrush (x)); Code>, où sélectionneursColors n'est qu'un
ienumerable
let itemColors = Carte sélectionnéeColors (nouveau SolidColorBrush) code>. p>
Var itemColors = SelectedColors.Sélectionnez (Nouveau SolidColorBrush) Code> Qui ne nécessite pas de Lamba. Est-ce possible dans C # ou la langue n'a aucun moyen d'exprimer cette construction? P>
3 Réponses :
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. p>
Je ne suis pas sûr de vous comprendre correctement. Mais parlez-vous d'un De cette façon, vous pouvez transmettre une valeur à l'usine et créera une instance pour vous. P> usine code>?
SolidColorBrush brush = ColorBrushFactory.BrushFrom(color);
Il essaie de créer une instance de délégation d'un CTOR normal.
Vous pouvez poser une méthode formelle: alors vous pouvez utiliser sélectionner code> comme ceci: p>
+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 ().
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.