草庐IT

三元表达

全部标签

c# - 将动态表达式传递给代码优先 EF 存储库中的排序依据

我们编写了一个通用函数,以存储库模式首先从EF代码中获取记录。休息似乎没问题,但是当将整数传递给动态订单时,它说CannotcastSystem.Int32toSystem.Object表达式如下:Expression>orderByFunc=o=>o.Id;if(options.sort=="Id"){//thisisanIntegerorderByFunc=o=>o.Id;}if(options.sort=="Name"){//stringorderByFunc=o=>o.Name;}if(options.sort=="Code"){orderByFunc=o=>o.Code;}泛

c# - 为什么我需要用这个简单的 LINQ 表达式来引用 System.Numerics?

首先,我知道如何到referenceSystem.Numerics让编译器访问它要求的Complex类型,我只是不明白为什么有必要。我有这个基本结构://////Describesasinglepointonaspectrum.///publicstructSpectrumPoint{publicSpectrumPoint(doublewavelength,doubleintensity){Wavelength=wavelength;Intensity=intensity;}publicdoubleIntensity{get;}publicdoubleWavelength{get;}}

c# - 为什么局部函数生成的 IL 不同于匿名方法和 Lambda 表达式?

为什么C#7编译器将局部函数转换为其父函数所在的同一类中的方法。而对于匿名方法(和Lambda表达式),编译器会为每个父函数生成一个嵌套类,它将包含所有匿名方法作为实例方法?例如,C#代码(匿名方法):internalclassAnonymousMethod_Example{publicvoidMyFunc(string[]args){varx=5;Actionact=delegate(){Console.WriteLine(x);};act();}}将生成类似于以下内容的IL代码(匿名方法):.classprivateautoansibeforefieldinitAnonymousM

c# - Lambda 表达式的非常简单的解释

我正在寻找一个非常简单-基本-没有硬核编程的庞然大物,用外行的术语简单地概括一下Lambda表达式。 最佳答案 简单地说,lambda表达式是一个可重复使用的表达式,它带有多个参数:x=>x+1;上面的表达式是“对于给定的x,返回x+1”。在.NET中,这很强大,因为它可以编译成匿名委托(delegate),这是一个无名函数,您可以在您的代码中声明内联并评估以获取值:intnumber=100;Funcincrement=x=>x+1;number=increment(number);//Callsthedelegateexpres

c# - 将 lambda 表达式用于事件处理程序的最佳实践

在发现lambda表达式并将它们用作匿名函数之后,我发现自己编写了很多更琐碎的事件,例如:txtLogin.GotFocus+=(o,e)=>{txtLogin.Text=string.Empty;txtLogin.ForeColor=SystemColors.ControlText;};txtLogin.LostFocus+=(o,e)=>{txtLogin.Text="Login...";txtLogin.ForeColor=SystemColors.InactiveCaptionText;};我也放弃了只调用其他函数的事件处理程序,将它们替换为执行相同操作的小型lambda:ba

c# - Expression.Call 在简单的 lambda 表达式中。可能吗?

我需要生成一个像这样的lambda表达式item=>item.Id>5&&item.Name.StartsWith("Dish")好的,item.Id>5很简单varitem=Expression.Parameter(typeof(Item),"item");varpropId=Expression.Property(item,"Id");varvalueId=Expression.Constant(5);varidMoreThanFive=Expression.GreaterThan(propId,valueId);但第二部分对我来说更复杂......varpropName=Expr

c# - 类型为 ‘dynamic’ 的表达式在运行时的行为方式是否应与相同运行类型时间的非动态表达式相同?

考虑以下示例程序:usingSystem;publicdelegatestringMyDelegateType(intinteger);partialclassProgram{staticstringMyMethod(intinteger){returninteger.ToString();}staticvoidMain(){Funcfunc=MyMethod;//Scenario1:worksvarnewDelegate1=newMyDelegateType(func);newDelegate1(47);//Scenario2:doesn’tworkdynamicdyn=func;v

c# - 为什么不允许为方法声明空表达式体?

我有一个像这样有一个空主体的方法:publicvoidFoo(){}根据ReSharper的建议,我想将它转换为表达式主体以节省一些空间,它变成了:publicvoidFoo()=>;无法编译。是否有不支持的具体原因?而且我认为我应该为ReSharper打开一个错误票,因为它会将代码重构为不可编译的版本。 最佳答案 [编辑:此答案不正确,请勿使用-请参阅评论。]如您所见,表达式主体使用了lambda运算符(“=>”)。如果您仍想将空的void方法编写为表达式主体,则可以使用Expression.Empty()来表明Foo()是空(v

c# - 在 C# : where to start? 中解析骰子表达式(例如 3d6+5)

所以我希望能够在C#中解析和计算“骰子表达式”。骰子表达式定义如下::=+|-|[]d(|%)|:=positiveinteger例如d6+20-2d3将被允许,并且应该评估为rand.Next(1,7)+20-(rand.Next(1,4)+rand.Next(1,4))另外d%应该等同于d100。我知道我可以拼凑出一些解决方案,但我也知道这似乎是一个非常典型的计算机科学类型的问题,因此我应该研究一些super优雅的解决方案。我希望我的解析结果具有以下功能:我应该能够输出表达式的规范化形式;我首先考虑骰子,按骰子大小排序,并且总是带有前缀。所以例如上面的示例将变为1d6-2d3+20

c# - 表达式/语句树

进一步更新问题我一直在尝试在.NET4中使用表达式树在运行时生成代码,并且一直在尝试通过构建表达式树来实现foreach语句。最后,表达式应该能够生成执行此操作的委托(delegate):Action>action=source=>{varenumerator=source.GetEnumerator();while(enumerator.MoveNext()){vari=enumerator.Current;//thebodyoftheforeachthatIdon'tcurrentlyhaveyet}}我提出了以下从IEnumerable生成BlockExpression的辅助方法