从功能创建转换器的最佳方法是什么?

时间:2016-09-09 10:38:02

标签: c#

我想将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'

将功能用作转换器的最佳方法是什么?

3 个答案:

答案 0 :(得分:9)

这里有三个选项。按照我的首选顺序,它们是:

  • 开始使用LINQ而不是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);
    
  • 如果你真的,真的必须使用委托创建表达式从函数创建一个转换器:

     localSessionFactoryBean.getConfiguration().getTypeResolver().registerTypeOverride(UserType, keys);
    

最后一个选项创建一个仅包装原始委托的委托。

答案 1 :(得分:4)

使用Select(),或者只使用var appliedList = new List<int>(){ 1, 2, 3 }.Select(f); 进行映射:

Acc_inert = T * Acc_body 

答案 2 :(得分: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);