动态生成的泛型类型无法正常工作

问题描述

以下代码可以正常使用

 Dim SubmodelElement = New BaSyx.Models.Core.AssetAdministrationShell.Implementations.SubmodelElementTypes.[Property](Of Double)() With {
                .IdShort = "TestProperty1",.[Set] = Function(prop,val)
                             Return _test = val
                         End Function
        }
    SubmodelElement.[Get] = Function(prop)
                                Return 4711
                            End Function

我想要做的是使用以下代码为我的类的每个属性动态创建那些子模型元素:

For Each Eigenschaft As PropertyInfo In Me.GetType().GetProperties()
            If Eigenschaft.CanRead = True Then
                Dim Eigenschaftstyp As Type = Type.GetType(Eigenschaft.PropertyType.FullName)

                Dim GenerischerTypBasysProperty As Type = GetType(BaSyx.Models.Core.AssetAdministrationShell.Implementations.SubmodelElementTypes.Property(Of)).MakeGenericType(Eigenschaftstyp)
                Dim BasysEigenschaft = Activator.CreateInstance(GenerischerTypBasysProperty)

                BasysEigenschaft.IdShort = Eigenschaft.Name
                BasysEigenschaft.[Get] = Function(prop)
                                             'Return Eigenschaft.GetValue(Me)
                                             Return 4711
                                         End Function
                BasysEigenschaft.Set = Sub(ByVal Prop,ByVal Wert)
                                           Eigenschaft.SetValue(Me,Wert)
                                       End Sub
                MyBase.SubmodelElements.Add(BasysEigenschaft)
            End If
        Next

在调试器中可以看到两个对象(SubmodelElement和BasysEigenschaft是同一类型)。

screenshot of values of submodelElement and BasysEigenschaft

不幸的是,[Get]功能的分配在第二个代码片段中无效。我收到此错误

system.invalidCastException:“方法调用失败,因为无法使用以下参数调用'公共替代BaSyx.Models.Core.AssetAdministrationShell.Generics.SubmodelElementTypes.GetPropertyValueHandler(Of Double)的属性Get()”: 参数匹配参数'value'不能从'VB $ AnonymousDelegate_0(Of Object,Integer)'转换为'GetPropertyValueHandler(Of Double)'。”

screenshot of error message

任何帮助将不胜感激

解决方法

我与SubmodelElemenntTypes.Property -Class的创建者讨论了这个问题。 像Craig建议的那样,Activator.CreateInstance方法不会完全像新的T属性构造函数那样创建类型。以下几行解决了这些问题。

versionElement.querySelector('.htlgb').text

感谢克雷格的帮助!