Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表生成类<;字符串>;表达式树的运行时_C#_Serialization_Lambda_Expression Trees_Dynamictype - Fatal编程技术网

C# 从列表生成类<;字符串>;表达式树的运行时

C# 从列表生成类<;字符串>;表达式树的运行时,c#,serialization,lambda,expression-trees,dynamictype,C#,Serialization,Lambda,Expression Trees,Dynamictype,我有 让我解释一下我为什么需要这个,我写了一篇关于表达式树序列化的文章。最后我用它来完成这项任务。序列化和反序列化工作正常,但我面临另一个问题。 我的算法构建了一个具有以下主体的表达式: public class MyTypeA {decimal value {get;set;}}; public class MyTypeB; {decimal value {get;set;}}; 这个主体是为表达式(MyTypeA-MyTypeB+MyTypeA)获取的,其中MyTypeA和MyTypeB是

我有

让我解释一下我为什么需要这个,我写了一篇关于表达式树序列化的文章。最后我用它来完成这项任务。序列化和反序列化工作正常,但我面临另一个问题。 我的算法构建了一个具有以下主体的表达式:

public class MyTypeA {decimal value {get;set;}};
public class MyTypeB; {decimal value {get;set;}};
这个主体是为表达式(MyTypeA-MyTypeB+MyTypeA)获取的,其中MyTypeA和MyTypeB是参数。args[n]它是参数数组。问题是我不知道数组元素和参数之间的关联。如果我没有弄错的话,我应该有类似的东西:

{(args[0] - args[1] + args[0])}
其中MyTypeA和MyTypeB是运行时生成的类型。 我知道可以编写一个包装器,同时发送带有参数的表达式和数组。但在我的情况下,我今天可以在服务器上发送表达式,一周后发送参数。 所以我问这个问题

这里有一个

我怀疑的功能:

public Expression Parse()
方法按字符读取表达式字符串

{(MyTypeA - MyTypeB + MyTypeA)}

创建表示应用数组索引运算符的表达式。

很抱歉,您的问题确实不清楚。您是否在寻找基于列表中的值的反射?嗯,我认为您需要在运行时编译代码。你可以在这里看到更多-我添加了一个到源代码的链接。为什么你需要为此生成类型?参数名(或索引,如果您愿意)应该足够了。稍后计算表达式时,可以使用这些名称(或索引)查找关联的值。您可能希望将这些名称包装在某种AST节点中,以便将它们与字符串文字区分开来—例如,请参阅Linq的
ParameterExpression
。可能我不太明白。你能通过我文章底部的链接看看源代码吗?它可以从字符串工作并创建表达式。但我认为某个地方犯了一个逻辑错误。
{(MyTypeA - MyTypeB + MyTypeA)}
private Expression ReadParameter(TextReader reader, Expression arrayParameter)