草庐IT

表达沟通

全部标签

c# - 如何比较两个 lambda 表达式?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowtocheckiftwoExpression>arethesame我需要比较两个lambda表达式,以检查相等性。基本上,以下两个lambda是相同的:Expression>exp1=(Foof)=>f.Bar().StartsWith("F");Expression>exp2=(Foob)=>b.Bar().StartsWith("F");我如何检查exp1是否与exp2做同样的事情?

C# 调试包含 lambda 表达式的函数

这个问题在这里已经有了答案:WhycanInoteditamethodthatcontainsananonymousmethodinthedebugger?(5个答案)关闭6年前。我有一个带有lambda表达式的函数,例如:intmaxOccurrences=(fromfieldindataselectfield).Max(f=>f.Occurrences)附言我确信上面的陈述有更好/更整洁/更惯用的版本,知道它可能是什么可能会很好,尽管它对问题并不重要!如果我在调试时修改了函数中的任何其他内容,比如Console.Write表达式,调试器会指出:Modifyinga'method'w

c# - 构建动态表达式树以过滤集合属性

我正在尝试构建一个lambda表达式,它将与其他表达式组合成一个相当大的表达式树以进行过滤。在我需要按子集合属性进行过滤之前,这工作正常。如何构建一个Lambda表达式,该表达式将使用Any()对作为根对象属性的集合属性进行过滤?例子:CurrentDataSource.Offices.Where(o=>o.base_Trades.Any(t=>t.Name=="test"))这就是我静态构建表达式的方式,但我需要动态构建它。抱歉造成混淆。编辑:这是我如何处理不太复杂的表达式的片段:IQueryableofficeQuery=CurrentDataSource.Offices.AsQu

c# - C# lambda 表达式的参数类型推断中的歧义

我的问题是由EricLippert的thisblogpost提出的.考虑以下代码:usingSystem;classProgram{classA{}classB{}staticvoidM(Ax,By){Console.WriteLine("M(A,B)");}staticvoidCall(Actionf){f(newA());}staticvoidCall(Actionf){f(newB());}staticvoidMain(){Call(x=>Call(y=>M(x,y)));}}编译成功并打印M(A,B),因为编译器计算出x的类型和y在lambda表达式中应该是A和B分别。现在,为

c# - C# 编译器或 JIT 能否优化掉 lambda 表达式中的方法调用?

我是在关于另一个StackOverflow问题的讨论(incomments)之后开始这个问题的,我很想知道答案。考虑以下表达式:varobjects=RequestObjects.Where(r=>r.RequestDate>ListOfDates.Max());移动ListOfDates.Max()的评价有没有(性能)优势?在这种情况下,在Where子句之外,还是会1.编译器或2.JIT优化它?我相信C#只会在编译时进行常量折叠,并且可以说ListOfDates.Max()在编译时无法知道,除非ListOfDates本身在某种程度上是常量。也许还有另一个编译器(或JIT)优化可以确保

c# - 解析字符串 C# LINQ 表达式

我正在尝试在这里进行一些真正的动态查询-最好不要在运行时调用编译器。我有一个包含LINQ表达式的字符串,例如vars="fromainqueryablewherea.Type==1selecta";我怎样才能从中得到IQueryable或Expressions的结果?我见过LINQPad和RavenDb都这样做,所以我相信有办法,只是我还没有找到。 最佳答案 您有一些选择:做一些自己开发的东西,解析文本并构建表达式树。对此的标准方法是使用语言解析器来解析字符串(如ANTLR)。使用CodeDOM编译查询(不推荐用于生产环境,因为这很

c# - 编译的 C# lambda 表达式性能与叠层

考虑这个类://////Dummyimplementationofaparserforthepurposeofthetest///classParser{publicListReadList(FuncreadFunctor){returnEnumerable.Range(0,10).Select(i=>readFunctor()).ToList();}publicintReadInt32(){return12;}publicstringReadString(){return"string";}}我尝试使用已编译的lambda表达式树生成以下调用:Parserparser=newPars

c# - 构建动态 LINQ 表达式时如何检测 IsNull/NotNull?

我正在构建稍后计算的动态LINQ表达式。因此,例如,如果我想知道某个属性是否等于某个值,我会这样做://MemberExpressionproperty;//int?val;Expression.Equal(property,Expression.Constant(val))但是,我似乎找不到检测val是否为Null或NOTNull的方法。有人可以向我推荐该怎么做吗?我试过这个:Expression.Equal(property,Expression.Constant(null,property.Type));但显然,那是行不通的。 最佳答案

c# - 似乎表达式的某些部分可能在编译时被评估,而其他部分在运行时

可能是一个愚蠢的问题,因为我可能已经回答了我的问题,但我只是想确保我没有遗漏一些东西常量表达式在编译时在检查的上下文中计算。我认为不应在编译时计算以下表达式,因为我假设C#仅当左侧的所有操作数都是常量时才将特定表达式视为常量表达式:inti=100;longu=(int.MaxValue+100+i);//error相反,编译器似乎将两个操作数都是常量的任何子表达式视为常量表达式,即使表达式中的其他操作数是非常量?因此编译器可能只在编译时计算表达式的一部分,而表达式的剩余部分(包含非常量值)将在运行时计算-->我假设在下面的例子中只有(200+100)在编译时被评估inti=100;l

c# - 合并两个 Linq lambda 表达式

Expression>fn1=x=>x.PossibleSubPath.MyStringProperty;Expression>fn2=x=>x.Contains("someliteral");有没有办法创建一个新的lambda表达式,它基本上使用fn1的输出并将其用作fn2的输入?Expression>fnCombined=...我知道我可以一次创建函数,但问题是我正在编写一些通用代码,因此确实需要能够分别创建这两个函数,然后以Linq可以的方式组合它们在我的数据库对象(EntityFramework)上使用它们。 最佳答案 所以