如何使用generics类型参数传入func?
我喜欢将generics类型转换器函数发送到方法,但我无法弄清楚如何做到这一点。
这是解释我想要实现的无效语法,问题是我不知道如何与我的func一起指定generics类型:
public void SomeUtility(Func converter) { var myType = converter("foo"); }
编辑(另请参阅我在Lawrence评论中的讨论):通过“generics转换器”我的意思是我想传入一个可以转换为任何强类型(不是对象)的转换器,所以我的下一行方法可能是:
var myOtherType = converter("foo");
我想作为参数传递的委托看起来像这样:
private delegate TOutput myConverterDelegate(object objectToConvert);
这更像是一种语法/ C#探索,为了完成任务,我可能会使用一个接口,但我希望这可以用func / delegate来完成。
您不能拥有通用函数或操作的实例 – 所有类型参数都是预先定义的,并且无法由调用者重新定义。
一种简单的方法是依靠向下转换来完全避免多态性:
public void SomeUtility(Func converter) { var myType = (MyType)converter(typeof(MyType), "foo"); }
如果需要类型安全性,则需要将类型参数的定义推迟给调用者。 您可以通过在接口中组合通用方法来完成此操作:
public void SomeUtility(IConverter converter) { var myType = converter.Convert("foo"); } interface IConverter { T Convert(object obj); }
编辑:
如果在调用站点知道’转换器类型’,并且在实用程序方法中只使用此类型,那么您可以在方法上定义generics类型并使用它,就像其他海报所建议的那样。
public void SomeUtility(Func
然后:
SomeUtility(arg => new MyType());
在这种情况下,generics类型推断将起作用。
你也需要使SomeUtility
通用的。 这样做并修复语法给出:
public void SomeUtility(Func
您必须在编译时知道T类型才能使用它。 T可以在类级别或方法级别指定。
class SomeClass { public void SomeUtility(Func
要么
上述就是C#学习教程:如何使用generics类型参数传入func?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public void SomeUtility(Func
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1028003.html