我目前正在一个项目,其中一段代码看起来像这样:
Select Case oReader.Name Case "NameExample1" Me.Elements.NameExample1.Value = oReader.ReadString .... Case "NameExampleN" Me.Elements.NameExampleN.Value = oReader.ReadString .... End Select
它继续了一段时间。代码显然是冗长的,感觉像它可以改进。有什么办法动态调用一个属性在VB.NET中,这样的东西可以做:
Dim sReadString As String = oReader.ReadString Me.Elements.InvokeProperty(sReadString).Value = sReadString
其他人完全合理地回答,但是为了防止这是一个性能敏感的代码段,你可能想将反射调用编译成代理。
我有一个blog entry,把MethodBase.Invoke变成代表。代码是在C#中,但相同的技术也可以应用于VB.NET。要使用这个属性,使用PropertyInfo.GetSetMethod获取适当的“setter”方法,然后构建一个调用它的委托。你可以有一个地图从字段名称到“委托调用设置字段”。
只是重申,这只是真的有必要,如果它在一个性能关键的代码。否则,您可能仍然需要创建一个字典< string,PropertyInfo>以避免调用GetProperty多次,但将其转换为委托的步骤可能不值得担心。