我想将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'
将功能用作转换器的最佳方法是什么?
答案 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);