Вызов конструктора как функции в C # - PullRequest
8 голосов
/ 30 августа 2010

Есть ли способ в C # ссылаться на конструктор класса как на стандартную функцию?Причина в том, что Visual Studio жалуется на изменение функций с помощью лямбда-выражений в них, и часто это просто оператор выбора.

Например, var ItemColors = selectedColors.Select (x => new SolidColorBrush(x));, где selectedColors - это просто IEnumerable<System.Windows.Media.Color>.

Технически говоря, не должна ли лямбда быть избыточной?select принимает функцию, принимающую тип T и возвращающую тип U. Кисть сплошного цвета принимает (правильный) тип T здесь и возвращает U. Только я не вижу способа сделать это в C #.В F # это было бы что-то вроде let ItemColors = map selectedColors (new SolidColorBrush).

TL; DR: Я думаю, я ищу правильную форму var ItemColors = selectedColors.select (new SolidColorBrush), которая не требует ламбы.Возможно ли это в C # или у языка нет возможности выразить эту конструкцию?

Ответы [ 3 ]

7 голосов
/ 30 августа 2010

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

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

Тогда вы можете использовать Select так:

var ItemColors = selectedColors.Select(Transform);
6 голосов
/ 30 августа 2010

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

0 голосов
/ 30 августа 2010

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

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

SolidColorBrush brush = ColorBrushFactory.BrushFrom(color);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...