2016-09-09 3 views
3

Я хочу, чтобы применить объект Func как преобразователь, как это:Каков наилучший способ создания конвертера из функции?

Func<int, double> f = x => x/2.5; 
Converter<int, double> convert = f; 
List<double> applied_list = new List<int>(){1, 2, 3}.ConvertAll(convert); 

Компилятор дает мне такое сообщение:

CS0029 Ошибка Не удается неявно преобразовать тип «System.Func» до «System.Converter»

Что лучше всего использовать в качестве преобразователя?

ответ

9

Есть три варианта здесь. В моем предпочтительном порядке, они являются:

  • Начните использовать LINQ вместо ConvertAll:

    List<double> appliedList = new List { 1, 2, 3 }.Select(f).ToList(); 
    
  • Создать конвертер, чтобы начать с:

    Converter<int, double> converter = x => x/2.5; 
    List<double> appliedList = new List { 1, 2, 3 }.ConvertAll(converter); 
    
  • Если вы действительно, действительно должен создать конвертер из функции с использованием выражения создания делегата:

    Func<int, double> f = x => x/2.5; 
    Converter<int, double> converter = new Converter<int, double>(f); 
    List<double> appliedList = new List { 1, 2, 3 }.ConvertAll(converter); 
    

Последний вариант создает делегат, который просто обертывает исходный.

4

Использование var converter = new Converter<int, double>(f), или просто с помощью Select() для отображения вместо:

var appliedList = new List<int>(){ 1, 2, 3 }.Select(f); 
3

Если вы предпочитаете использовать .ConvertAll вместо .Select затем реализовать простой обходной путь для преобразования Func делегировать Converter следующим способом:

Func<int, double> f = x => x/2.5; 
    Converter<int, double> convert = x => f(x); 
    List<double> applied_list = new List<int>() { 1, 2, 3 }.ConvertAll(convert); 
Смежные вопросы