草庐IT

表达力

全部标签

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的辅助方法

c# - 表达式树复制或转换

如何将ExpressionTree转换为Expression>exp=p=>p.Age>50;到Expression>exp2=p=>p.Age>50;其中POCO1和POCO2是C#对象并且都具有Int32Age属性 最佳答案 好吧,你可以创建自定义表达式访问者来替换参数引用和补丁成员访问表达式classConverter{classConversionVisitor:ExpressionVisitor{privatereadonlyParameterExpressionnewParameter;privatereadonlyPa

c# - 使用三元表达式分配给可空类型时,将 null 转换为可空是否正确?

将null转换为类型对我来说感觉很奇怪,所以我想仔细检查这是否是正确的方法:decimal?d=data.isSpecified?data.Value:(decimal?)null;注意:我正在标记建议我个人最喜欢的方法的答案:decimal?d=data.isSpecified?data.Value:default(decimal?) 最佳答案 是的,没关系。备选方案:condition?(decimal?)value:nullcondition?newdecimal?(value):nullcondition?value:def

c# - 是否有一个 *总是* 产生 null 的 VB.NET 表达式?

我们都知道VB的Nothing与C#的null类似,但不等同。(如果您不知道,请先查看thisanswer。)出于好奇,我想知道以下内容:是否存在始终产生null的VB.NET表达式?举个具体的例子,拿下面的语句:DimoAsObject=If(myBool,5,...)是否可以将...替换为某些东西,例如o是5而myBool是true和Nothing/null当myBool为false时?明显行不通的解决方案:Nothing(参见上面链接答案的问题),DirectCast(Nothing,Object)(使用OptionStrictOn时抛出编译时错误),DirectCast(Not

c# - 具有 OR 子句和空值的 lambda 表达式的 LINQ where 子句返回不完整的结果

问题简而言之我们在Where子句中使用了一个lambda表达式,它没有返回“预期”结果。快速总结在analysisObjectRepository对象中,有一些对象在名为Parent的属性中也包含父关系。我们正在查询此analysisObjectRepository以返回一些对象。细节下面的代码应该做的是,返回包含ID值的特定对象的根、第一个子对象(直接子对象)和孙对象。在下面的代码中,常识告诉我们,所有使3个单独的OR条件中的任何一个为真的结果都应该在结果中返回。ListanalysisObjects=analysisObjectRepository.FindAll().Where(

c# - 接受 Expression<Func<T>> 表达式作为参数的扩展方法

我正在使用.NET4.5和C#我想创建扩展方法,允许我传递对象的属性,如果该对象的Id为0,则returnnull否则返回该属性值。我可以通过反射(reflection)来解决问题,所以请考虑更多的训练练习,而不是我试图解决实际问题。当前扩展方法位于static类中,如下所示:publicstaticobjectGetNullIfNotSet(thisWillAnsweranswer,Expression>expression){if(answer.Id==0)returnnull;returnexpression.Compile()();}我希望能够使用它的方式如下(答案类型为Wil

c# - 如何将表达式树编译为可调用方法 C#?

我有一个表达式树,它是通过使用C#中的表达式类解析Xml创建的。Seethisquestion.我的表达式树中只有加、减、除、乘、参数以及和或。有没有办法将此ExpressionTree转换为可调用方法?...还是我必须手动发出IL?亲切的问候, 最佳答案 您需要创建一个lambda-即varlambda=Expression.Lambda>(body,param);Funcmethod=lambda.Compile();intv=method(1.0);//test其中“body”是涉及ParameterExpression参数的