2015-04-02 3 views
2

Ok, некоторые унаследовали код: У меня есть с-структуру всей нагрузки разрешений:доступа структура VB.Net элемент по имени переменной

public structure Perms 
    dim writeStaff as Boolean 
    dim readStaff as Boolean 
    dim writeSupervisor as Boolean 
    dim readSuperVisor as Boolean 
    ' ... and many more 
End Structure 

И я хочу функцию Cando который я создал так:

public function canDo(p as Perms, whichOne as String) as boolean 
    Dim b as System.Reflection.FieldInfo 
    b = p.GetType().GetField(whichOne) 
    return b 
end function 

и зову Cando с заранее заполненной структурой и «writeSupervisor» параметров

в отлаживать, б появляется как {Boolean writeSupervisor}, но когда я пытаюсь вернуться б как Boolean, я получаю сообщение об ошибке: значение типа e 'System.Reflection.FieldInfo' не может быть преобразован в 'Boolean'.

Любые идеи о том, как я могу «индексировать» в struct по имени элемента и значениям test/compare/return?

ответ

3

Чтобы получить значение поля, вам необходимо вызвать метод GetValue объекта FieldInfo.

Public Function canDo(p As Perms, whichOne As String) As Boolean 
    If (Not String.IsNullOrEmpty(whichOne)) Then 
     Dim info As FieldInfo = p.GetType().GetField(whichOne) 
     If (Not info Is Nothing) Then 
      Dim value As Object = info.GetValue(p) 
      If (TypeOf value Is Boolean) Then 
       Return DirectCast(value, Boolean) 
      End If 
     End If 
    End If 
    Return False 
End Function 

Я также рекомендую вам ознакомиться с этим: Visual Basic Naming Conventions.

+0

Работал очарование, спасибо. Именование: в качестве примера я просто набил старые имена. Я должен сказать, что info.GetValue (p), передавая исходный объект p в качестве параметра, кажется очень противоречивым. –

+0

Отлично! Я понимаю, что вы имеете в виду, но вы должны помнить, что объект информации поля создается с использованием типа объекта rater, чем экземпляр объекта. Итак, 'p.GetType(). GetField (whichOne)' такой же, как 'GetType (Perms) .GetField (whichOne)'. –

Смежные вопросы