Dynamically invoke properties by string name using VB.NET

前端 未结 3 581
北海茫月
北海茫月 2020-12-28 14:30

I\'m currently working on a project where a section of the code looks like this:

Select Case oReader.Name
    Case \"NameExample1\"
        Me.Elements.NameE         


        
3条回答
  •  梦谈多话
    2020-12-28 15:07

    Others have answered perfectly reasonably, but just in case this is a performance-sensitive piece of code, you might want to compile the reflective calls into delegates.

    I've got a blog entry about turning MethodBase.Invoke into delegates. The code is in C#, but the same technique can be applied to VB.NET as well. To use this with properties, get the appropriate "setter" method with PropertyInfo.GetSetMethod and then build a delegate which invokes that. You could have a map from field name to "delegate to call to set the field".

    Just to reiterate, this is only really necessary if it's in a performance-critical piece of code. Otherwise, you might still want to create a Dictionary to avoid calling GetProperty many times, but the step to convert it into a delegate probably isn't worth worrying about.

提交回复
热议问题