2010-11-16 40 views
4

我有一个函数可以更新数据库中的客户端。传入一个客户端对象,以及应该更新的字段/属性的字符串数组。我需要一种方法来访问客户端对象中的每个属性,这取决于数组中的内容。基本上,我正在寻找VB.NET相当于这个javascript:VB .NET按字符串值访问类属性

var fields = ["Firstname","Lastname","DOB"]; 
for(field in fields) 
{ 
    var thisField = fields[field]; 
    client[thisField] = obj[thisField]; 
} 

任何帮助将不胜感激!感谢堆栈。

回答

5

您可以使用Reflection来做到这一点。在不了解数据对象如何设置的情况下,我不能给你一个完美的例子,但这里的一般思路是:

Dim myPerson As New Person 
myPerson.FirstName = "John" 
myPerson.LastName = "Doe" 
myPerson.DOB  = #1/1/2000# 

Dim myUpdates As New Dictionary(Of String, Object) 
myUpdates.Add("FirstName", "Adam") 
myUpdates.Add("LastName" , "Maras") 
myUpdates.Add("DOB"  , #1/1/1990#) 

Dim personType As Type = GetType(Person) 

For Each kvp As KeyValuePair(Of String, Object) In myUpdates 
    Dim propInfo As PropertyInfo = personType.GetProperty(kvp.Key) 

    If propInfo IsNot Nothing Then 
     propInfo.SetValue(myPerson, kvp.Value) 
    End If 
Next 
+0

感谢您的好例子。显然反射是非常昂贵的。这是真的?如果是这样(并且没有其他方法这样做),我可能会为每个表单编写自定义Web服务。谢谢! – Brett 2010-11-16 04:37:13

+0

滥用时反射会很昂贵。我不太了解您的项目是否可以接受Reflection的开销,但是您可以采取的步骤(如缓存您在“Dictionary(Of String,PropertyInfo)”中查找的'PropertyInfo'对象'为更快的检索)可以减少这种开销。我会说,尝试一下,看看它是否足够快。如果您发现速度不可接受,请转到优化/缓存路径或您的自定义Web服务。 – 2010-11-16 04:40:58

+0

干杯!谢了哥们。 – Brett 2010-11-16 04:42:04