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

使用嵌套类型参数和递归(C#)分享

时间:2023-04-10 14:14:37 C#

使用嵌套类型参数和递归(C#)我试图利用嵌套参数类型,这似乎是非法的。我宁愿将递归函数保留在下面,这样我就不必重复逻辑。但是我的嵌套使用让CLR很不高兴(参见代码中列出的错误)。MyMethod中的逻辑不可避免地会创建两种类型的Action和Action委托。有没有办法更改下面的代码以实现我的目标?使用类型参数(即)的一般限制是什么?也许类型安全的丧失是禁止此类代码的原因?ClassA->ClassB(inherets)publicvoidMyMethod(ActionactionDelagate)whereTtype:ClassB{//递归调用Ttype=ClassAif(OnlyablecreateClassAdelay)MyMethod(v=>doStuff)//递归调用Ttype=ClassBif(OnlyablecreateClassBdelagate)MyMethod(v=>doStuff)//使用Delagateif(TypeOf(Ttype)==ClassA)actionDelagate(newClassA)//Expectingtype"Ttype"elseactionDelagate(newClassB))//Expectingtype"Ttype"}谢谢,aidesigner您使用的where子句没有意义。如果您知道函数需要ClassB,为什么不说myMethod(ActionactionDelegate)?如果你想使用一些通用的Ttype,你需要说出Ttype:new()在哪里,然后在调用actionDelagate时说出newTtype()。那应该做你想做的。publicvoidMyMethod(ActionactionDelagate)whereTtype:new(){MyMethod(v=>doStuff)actionDelagate(newTtype())//Expectingtype"Ttype"}我意识到我试图抽象问题让我很难了解我的极限。下面是一个接近实现的例子。下面的评论应该会有所帮助,这样您就不必深入研究.NET类了。我能够通过以Arg1作为操作创建CreateSrgsNodes的重载来解决我的问题。然而,这意味着在两个未通过气味测试的地方保留相同的代码。如果有人可以改进,请证明一个新的答案。以上就是C#学习教程的全部内容:使用嵌套类型参数和递归(C#)。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——publicvoidCreateSrgsNodes(ActionaddSrgsChild,CurrentNode){foreach(GmlModelgmlModelingmlModels){if(){varsrgsOneOf=newSrgsOneOf();addSrgsChild(srgsOneOf);//注意:Arg1是类型SrgsElementCreateSrgsNodes(srgsOneOf.Add,CurrenNode.getChild);}if(){varsrgsOneOf=newSrgsOneOf();addSrgsChild(srgsOneOf);//注:Arg1是typeSrgsItem(FAILSwithoutoverload)CreateSrgsNodes(Action,CurrentNode))CreateSrgsNodes(srgsOneOf.Add,CurrenNode.getChild);}created}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: