vb.net - 如何将类型传递给泛型类型?

标签 vb.net generics types

我在使用泛型类型时遇到一些困难。我们有一个反序列化方法,其签名如下所示:

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 1Suggestion 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/

相关文章:

.NET 拆分器控件显示

C#-泛型类中的数组协变

generics - 具有构造函数提供的实现的通用成员

c#插件系统问题

scala - 函数式面向对象语言的类型系统

无法在 32 位平台上为 64 位整数赋值

.net - 检查有效的 IMEI

database - 如何检查Access数据库中是否存在记录

vb.net - VB Nullables 和 Nothing

java - 如何在接口(interface)中使用静态方法来返回实例方法返回的泛型实例?