C# 使用表达式进行数组转换

C# 使用表达式进行数组转换,c#,lambda,expression,func,C#,Lambda,Expression,Func,需要帮助才能让这段代码正常工作 var splits = rawTokens[startIndex + 2].Value.Split(','); var paramk = Expression.Parameter(typeof(String), "item"); var converter = Expression.Lambda(Expression.Convert( paramk

需要帮助才能让这段代码正常工作

var splits = rawTokens[startIndex + 2].Value.Split(',');
var paramk = Expression.Parameter(typeof(String), "item");
                    var converter = Expression.Lambda(Expression.Convert(
                        paramk
                        , lToken.CorrespondingType), paramk);

                    var method = typeof(Array).GetMethod("ConvertAll").MakeGenericMethod(new Type[] { typeof(string), lToken.CorrespondingType });
                    var arrayBuilder = Expression.Call(method, Expression.Constant(splits), converter);
这与
System.ArgumentException:'System.Func
2[System.String,System.String]'类型的表达式不能用于'System.Converter
2[System.String,System.String]'方法'System.String[]ConvertAll[String,String](System.String[],System.Converter'2[System.String,System.String])的类型参数'

尝试传递
Expression.Lambda()
。它位于其他参数的前面。嗯,您确实需要获取
GetGenericTypeDefinition()
,然后
MakeGenericType()
传递
typeof(string)
lToken.CorrespondingType
。您可能还需要检查
lToken.CorrespondingType==typeof(string)的特殊情况
因为这样你就不需要转换了。@BenVoigt谢谢你。我已经尝试了第一种方法,但出现了强制错误。我肯定需要这种转换。考虑删除此表达式,但这是基于表达式的框架的一部分。如果错误消息不清楚,表达式lambda猜测它应该通过查看参数和返回类型生成
Func
,但是
Array.ConvertAll
需要
转换器。你必须阻止它猜测,告诉它你想要一个
转换器
,其中
是用
lToken填写的。CorrespondingType
。Type converterType=typeof(Converter);Type[]typeArgs={typeof(string),lToken.CorrespondingType};Type closedConverterType=converterType.MakeGenericType(typeArgs);var converter=Expression.Lambda(Expression.Convert(Expression.Convert(paramk,lToken.CorrespondingType),closedConverterType),paramk);