我喜欢向方法发送通用类型转换器函数,但我不知道该怎么做。
这是无效的语法,解释了我想要实现的目标,问题是我不知道如何与我的 func 一起指定泛型类型:
public void SomeUtility(Func<T><object,T> converter)
{
var myType = converter<MyType>("foo");
}
编辑(另请参阅我在评论中与劳伦斯的讨论):通过“通用类型转换器”,我的意思是我想传递一个可以转换为任何强类型 (不是对象)的转换器,所以我的下一行方法可以是:
var myOtherType = converter<MyOtherType>("foo");
我喜欢作为参数传递的委托看起来像这样:
private delegate TOutput myConverterDelegate<TOutput>(object objectToConvert);
现在这更多的是语法/C# 探索,为了完成任务,我可能会使用接口,但我确实希望这可以通过 func/delegate 来完成。
您不能拥有泛型函数或操作的实例 - 所有类型参数都是预先定义的,并且不能由调用者重新定义。
一个简单的方法是通过向下转型来完全避免多态性:
public void SomeUtility(Func<Type, object, object> converter)
{
var myType = (MyType)converter(typeof(MyType), "foo");
}
如果你想要类型安全,你需要将类型参数的定义推迟给调用者。您可以通过在接口中编写通用方法来实现此目的:
public void SomeUtility(IConverter converter)
{
var myType = converter.Convert<MyType>("foo");
}
interface IConverter
{
T Convert<T>(object obj);
}
Edit:
如果“转换器类型”在调用站点已知,并且只有此类型将在实用程序方法内使用,那么您可以在该方法上定义通用类型并使用它,就像其他海报所建议的那样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)