当前位置: 首页 > 编程语言 > C#

如何使用Linq表达式树从Span获取值?分享

时间:2023-04-11 02:10:42 C#

Linq表达式树如何从Span获取值?我想使用Linq表达式树来调用Span的索引器。代码如下:varspanGetter=typeof(Span).MakeGenericType(typeof(float)).GetMethod("get_Item");varmyFloatSpan=Expression.Parameter(typeof(Span),"s");varmyValue=Expression.Call(myFloatSpan,spanGetter,Expression.Constant(42));varmyAdd=Expression.Add(myValue,Expression.Constant(13f));但是,此代码失败,因为myValue的类型为Single&(又名refstruct)而不是Single(又名struct)。如何评估表达式树的跨度?我有一个解决方案,但它远非理想,如您所见。我们重新使用C#语法糖引擎。以上就是C#学习教程:如何使用Linq表达式树从Span中获取值?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——classProgram{staticvoidMain(string[]args){varspanGetter=typeof(Program).GetMethod("GetItem").MakeGenericMethod(typeof(float));varmyFloatSpan=Expression.Parameter(typeof(Span),"s");varmyValue=Expression.Call(null,spanGetter,myFloatSpan,Expression.Constant(42));varmyAdd=Expression.Add(myValue,Expression.Constant(13f));varexpr=Expression.Lambda(myAdd,myFloatSpan).Compile();varspan=newSpan(newfloat[43]);跨度[42]=12.3456f;Console.WriteLine(expr(span));//->25.3456}//希望这在性能方面应该不会太差...//C#知道如何编译它,而Linq表达式不知道publicstaticTGetItem(Spanspan,intindex)=>跨度[索引];//我们需要它,因为我们不能直接将Span与Func一起使用//我们也可以使它通用我猜publicdelegatefloatMyFunc(Spanspan);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: