2016-09-09 95 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); 
相关问题