我有一些代码在VB.NET中填充SOAP请求。我从SQL查询中获取数据并运行对象成员来填充每个查询。我试图找到一种快速(ish)方法,在它为空时不提供成员,而不是在应用它之前检查每个值。由于SQL数据首先来自管道分隔文件,因此我们永远不会获得NULL,只是在SOAP请求中以“”形式发送的空单元格。
有没有办法使用变量而不是文字名来定义对象成员?
UpLB_request_Items.Spare8 = Convert.ToString(SourceDataSet.tables(0).Rows(i)(colSPARE8))
UpLB_request_Items.Spare9 = Convert.ToString(SourceDataSet.tables(0).Rows(i)(colSPARE9))
UpLB_request_Items.Spare10 = Convert.ToString(SourceDataSet.tables(0).Rows(i)(colSPARE10))
Call IterateObject(UpLB_request_Items)
因此,这将使用SQL数据(SourceDataSet)中的值填充每个成员,然后我可以将完成的对象发送到Sub以在我实际将其发送到Web服务之前检查每个值
Sub IterateObject(objName)
Dim CollName = ""
For Each m As System.Reflection.PropertyInfo In objName.GetType().GetProperties()
If m.CanRead Then
If m.PropertyType.Name = "String" Then
CollName = m.Name
Dim CollVal = CallByName(objName, CollName, CallType.Get)
If CollVal = "" Then
objName.CollName = Nothing 'this is the tricky bit
End If
End If
End If
Next
End Sub
它明显中断的位是objName.CollName = Nothing因为它会说该对象没有名为CollName的成员,我不确定是否有办法强制代码将CollName评估为它的值(例如SPARE8而不是字符串“CollName”)