Есть ли способ в C # ссылаться на конструктор класса как на стандартную функцию? Причина в том, что Visual Studio жалуется на изменение функций с помощью лямбда-выражений в них, и часто это просто оператор выбора.
Например, var ItemColors = selectedColors.Select (x => new SolidColorBrush (x));
, где selectedColors является просто IEnumerable
Технически говоря, не должна ли лямбда быть избыточной? select принимает функцию, принимающую тип T и возвращающую тип U. Кисть сплошного цвета принимает (правильный) тип T здесь и возвращает U. Только я не вижу способа сделать это в C #. В F # это было бы что-то вроде let ItemColors = map selectedColors (new SolidColorBrush)
.
TL; DR: наверное, я ищу действительную форму var ItemColors = selectedColors.select (new SolidColorBrush)
, для которой не требуется ламба. Возможно ли это в C # или язык не может выразить эту конструкцию?
Нет, вы не можете ссылаться на конструктор C# как на группу методов и передавать его как параметр делегата. Лучший способ сделать это - использовать синтаксис лямбда в вашем вопросе.
Можно выложить формальный метод:
private static SolidColorBrush Transform(Color color)
{
return new SolidColorBrush(color);
}
Затем можно использовать Select
вот так:
var ItemColors = selectedColors.Select(Transform);
Я не уверен, что правильно вас понял. Но вы говорите о фабрике
?
Таким образом, вы можете передать значение фабрике, и она создаст для вас экземпляр.
SolidColorBrush brush = ColorBrushFactory.BrushFrom(color);
Надеюсь, это помогло.