将构造函数作为C#中的函数调用

时间:2010-08-30 15:18:15

标签: c# lambda

C#中有没有办法将类构造函数作为标准函数引用?原因是Visual Studio抱怨用lambdas修改函数,并且通常是一个简单的select语句。

例如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#中是可能的还是语言无法表达这种结构?

3 个答案:

答案 0 :(得分:7)

你可以列出一个正式的方法:

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

然后您可以像这样使用Select

var ItemColors = selectedColors.Select(Transform);

答案 1 :(得分:6)

不,您不能将C#构造函数作为方法组引用,并将其作为委托参数传递。最好的方法是通过问题中的lambda语法。

答案 2 :(得分:0)

我不确定我是否理解正确。但你在谈论factory吗?

这样您就可以将值传递给工厂,它将为您创建一个实例。

SolidColorBrush brush = ColorBrushFactory.BrushFrom(color);

希望这会有所帮助。