You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用GetValue方法遇参数过多及返回值为空的VB.NET技术问题

解决GetValue泛型调用错误及返回Nothing的问题

初始错误原因

你一开始调用GetValue(renderMaterial)报错,是因为这个泛型方法GetValue(Of T)()不需要参数,你多传了renderMaterial参数,所以触发「参数过多」的错误。

更新后返回Nothing的原因

你改成GetValue(Of Field)后编译通过,但返回空值,是因为泛型类型不匹配:GetValue(Of T)需要传入具体的字段子类类型(比如DoubleField或Color4fField),而不是基类Field。用基类的话,方法无法正确返回对应子类的实例,所以得到Nothing。

修正方案

方案1:直接针对具体字段类型处理(简单直观)

直接判断字段的实际类型,调用对应类型的泛型GetValue方法:

Try
    Dim field = renderMaterial?.Fields?.GetField(slotName)

    If field IsNot Nothing Then
        ' 处理DoubleField类型
        If TypeOf field Is DoubleField Then
            Dim doubleField = DirectCast(field, DoubleField)
            If doubleField.HasValue Then
                _Attributes.Number = doubleField.GetValue(Of Double)()
            End If
        ' 处理Color4fField类型
        ElseIf TypeOf field Is Color4fField Then
            Dim colorField = DirectCast(field, Color4fField)
            If colorField.HasValue Then
                _Attributes.Color = colorField.GetValue(Of Color4f)().SystemColorValue
            End If
        End If
    End If
Catch ex As Exception
    ' 添加具体的异常处理逻辑,比如日志输出
End Try

方案2:反射动态调用泛型方法(支持扩展更多字段类型)

如果后续需要支持更多字段类型,用反射动态匹配泛型类型调用:

Try
    Dim field = renderMaterial?.Fields?.GetField(slotName)

    If field IsNot Nothing Then
        Dim fieldType = field.GetType()
        ' 获取字段对应的泛型值类型(比如DoubleField对应Double)
        Dim valueType = fieldType.GetGenericArguments()(0)
        ' 动态构建并调用GetValue泛型方法
        Dim getValueMethod = fieldType.GetMethod("GetValue", Type.EmptyTypes)?.MakeGenericMethod(valueType)
        
        If getValueMethod IsNot Nothing Then
            Dim fieldValue = getValueMethod.Invoke(field, Nothing)
            
            If TypeOf field Is DoubleField Then
                _Attributes.Number = DirectCast(fieldValue, Double)
            ElseIf TypeOf field Is Color4fField Then
                _Attributes.Color = DirectCast(fieldValue, Color4f).SystemColorValue
            End If
        End If
    End If
Catch ex As Exception
    ' 异常处理
End Try

关键提示

  • 调用GetValue(Of T)时,T要和字段存储的实际值类型匹配(比如DoubleField对应Double,Color4fField对应Color4f),而非字段类型本身。
  • 用TypeOf判断类型比直接比较GetType()更灵活,能兼容字段类型存在继承的场景。

内容的提问来源于stack exchange,提问作者andyopayne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:32:50