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

如何使用泛型类型参数传入func?分享

时间:2023-04-11 01:24:30 C#

如何使用泛型类型参数传入func?我想向该方法发送一个泛型类型转换器函数,但我不知道该怎么做。这是解释我要实现的目标的无效语法,问题是我不知道如何指定泛型类型以及我的函数:publicvoidSomeUtility(Funcconverter){varmyType=converter("foo");编辑(另见劳伦斯评论中我的讨论):“通用转换器”是指我想传递一个可以转换为任何强类型(不是对象)的转换器,所以我的方法的下一行可能是:varmyOtherType=转换器(“富”);我想作为参数传递的委托看起来像这样:privatedelegateTOutputmyConverterDelegate(objectobjectToConvert);这更像是一种语法/C#探索,为了完成工作,我可能会使用接口,但我希望这可以通过func/delegate来完成。您不能拥有通用函数或操作的实例-所有类型参数都是预定义的,调用者不能重新定义。一种简单的方法是依靠向下转换来完全避免多态性:publicvoidSomeUtility(Funcconverter){varmyType=(MyType)converter(typeof(MyType),"foo");如果需要类型安全,您需要将类型参数的定义推迟到调用者。您可以通过在接口中组合通用方法来做到这一点:publicvoidSomeUtility(IConverterconverter){varmyType=converter.Convert("foo");}interfaceIConverter{TConvert(objectobj);编辑:如果在调用站点中知道“转换器类型”,并且只在实用方法中使用这种类型,那么您可以在方法上定义泛型类型并使用它,正如其他海报所建议的那样。publicvoidSomeUtility(Funcconverter){varmyType=converter("foo");然后:SomeUtility(arg=>newMyType());在这种情况下,泛型类型推断将起作用。您还需要使SomeUtility通用。这样做并修复语法给出:publicvoidSomeUtility(Funcconverter){varmyType=converter("foo");您必须在编译时知道T类型才能使用它。T可以在类级别或方法级别指定。classSomeClass{publicvoidSomeUtility(Funcconverter){varmyType=converter("foo");//已经是你指定的T型了。或者上面是一个C#学习教程:如何使用泛型类型参数传递func?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——publicvoidSomeUtility(Funcconverter){varmyType=converter("foo");//已经是您指定的T类型。}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: