2010-08-30 54 views
7

有沒有在C#中引用類構造函數作爲標準函數的方法?原因是Visual Studio抱怨使用lambda表達式修改函數,並且通常是一個簡單的select語句。在C#中調用構造函數作爲函數#

例如var ItemColors = selectedColors.Select (x => new SolidColorBrush(x));,其中selectedColors只是IEnumerable<System.Windows.Media.Color>

從技術上講,lambda不應該是多餘的? select接受一個類型T和返回類型U的函數。純色筆刷在這裏使用(正確的)類型T並返回一個U.只有我看不到在C#中做到這一點。在F#中,它會像let ItemColors = map selectedColors (new SolidColorBrush)

TL; DR:我想我正在尋找var ItemColors = selectedColors.select (new SolidColorBrush)的有效形式,它不需要lamba。這是可能的C#或語言無法表達這種構造?

回答

6

不,您不能將C#構造函數作爲方法組引用,並將其作爲委託參數傳遞。最好的方法是通過你的問題中的lambda語法。

0

我不確定我是否正確理解你。但是你說的是factory

這樣你就可以將一個值傳遞給工廠,它會爲你創建一個實例。

SolidColorBrush brush = ColorBrushFactory.BrushFrom(color); 

希望這對我有所幫助。

+0

他試圖從一個正常的構造函數創建一個委託實例。 – SLaks 2010-08-30 15:22:52

6

你可以制定出一個正式的方法:

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

然後你可以使用Select這樣的:

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

+1,這是一種我最近變得非常喜歡的構造模式,尤其是對於人造不可變性,以及在基類中,它們的靜態Create()方法在其實現者上調用方法。 – 2010-08-30 15:40:42

相關問題