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

C#通用函数类型分享

时间:2023-04-10 19:22:35 C#

C#通用函数类型我正在用C#编写一个小型Lisp解释器,它基本上可以工作。目前我正在使用一个接口来表示函数:publicinterfaceLispFunction{objectApply(ArrayListparameters);接口由多个类实现,如内部(标准)函数、lambda、宏扩展、通过反射调用.net对象中的方法等。请注意,速度在这里不是问题,只要让翻译工作变得有趣并在工作。现在我想让我的小Lisp接受任意的C#lambdas以便在解释器中使用,就像这样:Lispfoo=newLisp();foo.GlobalEnvironment.AddFunction("测试",(boola,intb)=>a?b:"哎呀");foo.Eval(foo.Read("(test#t5)"));//Shouldevaluateto(object)5我首先想到的是使用Func,但是我不得不使用大量的重载方法来实现Func,Func,Func等等。在C#中是否可以接受随后通过反射调用的任意lambda?在C#中是否可以接受随后通过反射调用的任意lambda?然后你可以写一个方法来获取一个任意的委托:publicvoidAddFunction(stringname,Delegatefunction)但是,lambda表达式的转换必须是一个特定的委托,所以你需要:Funcfunction=(a,b)=>A?b:"哎呀"foo.GlobalEnvironment.AddFunction("test",function);或在调用中投射:foo.GlobalEnvironment.AddFunction("test",(Func)((a,b)=>a?b:"whoops"));你可以把所有的重载放在一个地方,保持AddFunction完全通用,但是有一个像这样的静态类(有点像元组):publicstaticclassFunc{publicFuncCreate(Funcfunction){}publicFuncCreate(Funcfunction){返回函数;}publicFuncCreate(Funcfunction){返回函数;}//etc}这个类基本上只是为了方便而存在。那你调用:以上就是C#学习教程的全部内容:c#中的UniversalFunc类型。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——foo.GlobalEnvironment.AddFunction("test",Func.Create((boola,stringb)=>a?b:“哎呀”));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: