C# 从函数创建转换器的最佳方法是什么?

C# 从函数创建转换器的最佳方法是什么?,c#,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); Func f=x=>x/2.5; 转换器转换=f; List applied_List=newlist()

我想将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);
Func f=x=>x/2.5;
转换器转换=f;
List applied_List=newlist(){1,2,3}.ConvertAll(convert);
编译器给了我这样的信息:

错误CS0029无法将类型“System.Func”隐式转换为“System.Converter”


使用函数作为转换器的最佳方法是什么?

使用
var converter=new converter(f)
,或者简单地使用
Select()
进行映射:

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

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

  • 开始使用LINQ而不是
    ConvertAll

    List<double> appliedList = new List { 1, 2, 3 }.Select(f).ToList();
    
    List appliedList=新列表{1,2,3}。选择(f).ToList();
    
  • 创建一个转换器,从以下内容开始:

    Converter<int, double> converter = x => x / 2.5;
    List<double> appliedList = new List { 1, 2, 3 }.ConvertAll(converter);
    
    Converter=x=>x/2.5;
    List appliedList=新列表{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);
    
    Func f=x=>x/2.5;
    转换器=新转换器(f);
    List appliedList=新列表{1,2,3}.ConvertAll(converter);
    

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

如果您更喜欢使用
.ConvertAll
而不是
。选择
,然后执行一个简单的解决方法,以以下方式将
Func
转换为委托
转换器

    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);
Func f=x=>x/2.5;
转换器转换=x=>f(x);
List applied_List=newlist(){1,2,3}.ConvertAll(convert);