Другие ответили вполне разумно, но на случай, если это чувствительный к производительности фрагмент кода, вы можете скомпилировать отражающие вызовы в делегаты.
У меня есть запись в блоге о превращении MethodBase.Invoke в делегатов. Код написан на C #, но тот же метод может быть применен и к VB.NET. Чтобы использовать это со свойствами, получите соответствующий метод "setter" с PropertyInfo.GetSetMethod и затем создайте делегат, который вызывает это. Вы можете получить карту от имени поля до «делегировать вызов для установки поля».
Просто повторюсь, это действительно необходимо, только если это часть кода, критичного к производительности. В противном случае вы все равно можете создать Dictionary<string, PropertyInfo>
, чтобы избежать многократного вызова GetProperty
, но, вероятно, не стоит беспокоиться о шаге преобразования его в делегат.