Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# 表达式树在4.5中的解析方式与在3.5中的解析方式不同_C#_Asp.net_Delegates_Lambda - Fatal编程技术网

C# 表达式树在4.5中的解析方式与在3.5中的解析方式不同

C# 表达式树在4.5中的解析方式与在3.5中的解析方式不同,c#,asp.net,delegates,lambda,C#,Asp.net,Delegates,Lambda,我最近将一个.NET 3.5 web应用升级到了.NET 4.5。在应用程序的一部分中,我们构建了一个谓词来查询缓存中的数据,并将过滤器添加到谓词。有时我可能会添加相同的数据,其中多次使用不同的数据itemCode=123和itemCode=456。在3.5版本中,这是可行的,而在4.5版本中,这两个版本实际上似乎都不可行,我只是想知道是什么改变了。当我检查谓词时,要构建的代码在转换为4.5时没有更改,我看到的区别如下: {f => ((((True && Invoke(e

我最近将一个.NET 3.5 web应用升级到了.NET 4.5。在应用程序的一部分中,我们构建了一个谓词来查询缓存中的数据,并将过滤器添加到谓词。有时我可能会添加相同的数据,其中多次使用不同的数据itemCode=123和itemCode=456。在3.5版本中,这是可行的,而在4.5版本中,这两个版本实际上似乎都不可行,我只是想知道是什么改变了。当我检查谓词时,要构建的代码在转换为4.5时没有更改,我看到的区别如下:

{f => ((((True && Invoke(e => ((Convert(e.IsItem) != null) && (e.IsItem = value(AvailableItems+<>c__DisplayClass26).nei)),f)) && Invoke(e => ((e.VendorNumber != null) && (e.VendorNumber = value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)),f)) && Invoke(e => ((e.VendorNumber != null) && (e.VendorNumber = value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)),f)) && Invoke(e => ((e.VendorNumber != null) && (e.VendorNumber = value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)),f))}


{f => ((((True AndAlso Invoke(e => ((Convert(e.IsItem) != null) AndAlso (e.IsItem == value(AvailableItems+<>c__DisplayClass24).nei)), f)) AndAlso Invoke(e => ((e.VendorNumber != null) AndAlso (e.VendorNumber == value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)), f)) AndAlso Invoke(e => ((e.VendorNumber != null) AndAlso (e.VendorNumber == value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)), f)) AndAlso Invoke(e => ((e.VendorNumber != null) AndAlso (e.VendorNumber == value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)), f))}

有人能向我解释一下发生了什么事吗?AND的工作方式是否与&?

不可编译的代码不同。你能提供一个可编译代码的例子来演示这种行为吗?看起来这只是字符串表示的不同。我在这里支持@JonSkeet。@leppie好的,这里支持JonSkeet:我同意。但是,当只有一个表达式e.VendorNumber=valueAvailableItems+c__DisplayClass0.filter.ColumnValue,f为真时,第一个表达式返回值