2010-08-30 20 views
7

Esiste un modo in C# per fare riferimento a un costruttore di classi come funzione standard? Il motivo è che Visual Studio si lamenta della modifica delle funzioni con lambdas al loro interno e spesso è una semplice istruzione select.Costruttore di chiamata come funzione in C#

Ad esempio var ItemColors = selectedColors.Select (x => new SolidColorBrush(x));, dove selectedColors è solo IEnumerable<System.Windows.Media.Color>.

Tecnicamente parlando, il lambda non dovrebbe essere ridondante? select accetta una funzione accettando un tipo T e restituendo il tipo U. Il pennello a tinta unita prende (il corretto) tipo T qui e restituisce un U. Solo non vedo modo di farlo in C#. In F # sarebbe qualcosa come let ItemColors = map selectedColors (new SolidColorBrush).

TL; DR: Credo di cercare il modulo valido di var ItemColors = selectedColors.select (new SolidColorBrush) che non richiede un lamba. Questo è possibile in C# o la lingua non ha modo di esprimere questo costrutto?

risposta

6

No, non è possibile fare riferimento a un costruttore C# come un gruppo di metodi e passarlo come parametro delegato. Il modo migliore per farlo è tramite la sintassi lambda nella tua domanda.

0

Non sono sicuro di aver capito bene. Ma stai parlando di un factory?

In questo modo è possibile passare un valore alla fabbrica e verrà creata un'istanza per l'utente.

SolidColorBrush brush = ColorBrushFactory.BrushFrom(color); 

Spero che questo ha aiutato.

+0

Sta cercando di creare un'istanza delegato da un ctor normale. – SLaks

6

Si potrebbe tracciare un metodo formale:

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

quindi è possibile utilizzare Select come questo:

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

+1, Questo è un modello di costruzione che mi è piaciuto molto ultimamente, specialmente per la falsi-immutabilità, e nelle classi base che chiamano i metodi sui loro implementatori dallo statico Create(). –

Problemi correlati