我在使用泛型类型时遇到一些困难。我们有一个反序列化方法,其签名如下所示:
Public Function Deserialize(Of T)(ByVal compressedData As Byte()) As T
我们在数据库中有一些二进制数据(可以是多种类型:type1.Question、type2.Question,...)。因此,为了防止在循环中必须选择大小写
,我尝试了这样的操作:
Dim questionType as Type = question.getType()
Deserialize(Of questionType)(question)
无法识别此类型:“类型‘questionType’未定义”
有什么办法可以实现这个目标吗?
我已阅读并尝试过Suggestion 1和 Suggestion 2 ,但对于情况 1,我不能使用类型 T 作为表达式,而在情况 2 中,我不能使用“Of type”,因为这会在代码中给出错误(“类型未定义”)。
最佳答案
据我所知,您不能动态地执行此操作(可能没有反射和发出),因为编译器必须知道要为其生成代码的类型。
我通常使用由类型作为键控的字典,其值为处理程序对象。即使您没有反序列化器对象,也可以存储泛型函数的委托(delegate)。
类似这样的东西(从臀部开始,所以应该检查):
'register these just once
_deserializers.Add(GetType(QuestionStyleOne), AddressOf(Deserialize(QuestionStyleOne)())
'later invoke by type, no select case
Dim questionType as Type = question.getType()
_deserializers(questionType)(question)
关于vb.net - 如何将类型传递给泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15156379/