从函数创建转换器的最佳方法是什么?
本文关键字:方法 是什么 最佳 函数 创建 转换器 | 更新日期: 2023-09-27 18:06:24
我想像这样应用函数对象作为转换器:
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不能隐式转换类型"系统"。函数"到"系统。转换器'
使用函数作为转换器的最佳方法是什么?
这里有三个选项。按照我喜欢的顺序,它们是:
-
开始使用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);
最后一个选项创建一个代理,它只包装原来的代理。
使用var converter = new Converter<int, double>(f)
,或者简单地使用Select()
进行映射:
var appliedList = new List<int>(){ 1, 2, 3 }.Select(f);
如果您更喜欢使用.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);