Вызов конструктора как функции в C #

Есть ли способ в 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 # или язык не может выразить эту конструкцию?

9
задан MighMoS 30 August 2010 в 15:18
поделиться

3 ответа

Нет, вы не можете ссылаться на конструктор C# как на группу методов и передавать его как параметр делегата. Лучший способ сделать это - использовать синтаксис лямбда в вашем вопросе.

7
ответ дан 4 December 2019 в 14:26
поделиться

Можно выложить формальный метод:

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

Затем можно использовать Select вот так:

var ItemColors = selectedColors.Select(Transform);
7
ответ дан 4 December 2019 в 14:26
поделиться

Я не уверен, что правильно вас понял. Но вы говорите о фабрике?

Таким образом, вы можете передать значение фабрике, и она создаст для вас экземпляр.

SolidColorBrush brush = ColorBrushFactory.BrushFrom(color);

Надеюсь, это помогло.

0
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: