Get/SetArrayElement() reflection problem
BlitzMax Forums/BlitzMax Beginners Area/Get/SetArrayElement() reflection problem
| ||
I want to be able to set or get an array element's value using reflection. But I can't seem to figure out what to pass for an 'array:Object' argument to the get/setArrayElement() methods.. See the GetArrayValue() and SetArrayValue() functions below. Does anyone know what I'm doing wrong? Thanks, Danny. Type mine Field test:Object[5] End Type Local m:mine = New mine For Local i% = 0 To 4 m.test[i] = String(i) Next 'GET Array value Print "orig value @3 = "+ String(GetArrayValue(m, "test", 3)) 'SET Array value Print "poking value @3: "+ String(SetArrayValue(m, "test", 3, "33")) 'TEST Array value Print "new value @3 = "+ String(GetArrayValue(m, "test", 3)) ' End Function GetArrayValue:object( m:mine, fieldName$, arrayIndex% ) Local TID:TTypeId = TTypeId.ForObject(m) Local Fld:TField = TID.FindField(fieldName) Local FldType:TTypeId = Fld.TypeID() '"::HOW DO I FIX THIS to return m.test[3] ?! Return FldType.GetArrayElement( Fld, arrayIndex ) End Function Function SetArrayValue( m:mine, fieldName$, arrayIndex%, Value:Object ) Local TID:TTypeId = TTypeId.ForObject(m) Local Fld:TField = TID.FindField(fieldName) Local FldType:TTypeId = Fld.TypeID() 'HOW DO I FIX THIS SO THAT m.test[3] = value ?! FldType.SetArrayElement( Fld, arrayIndex, Value ) End Function |
| ||
Function GetArrayValue:Object( m:mine, fieldName$, arrayIndex% ) Local TID:TTypeId = TTypeId.ForObject(m) Local Fld:TField = TID.FindField(fieldName) Local FldType:TTypeId = Fld.TypeID() Return FldType.GetArrayElement( Fld.Get(m), arrayIndex ) End Function Function SetArrayValue( m:mine, fieldName$, arrayIndex%, Value:Object ) Local TID:TTypeId = TTypeId.ForObject(m) Local Fld:TField = TID.FindField(fieldName) Local FldType:TTypeId = Fld.TypeID() FldType.SetArrayElement( Fld.Get(m), arrayIndex, Value ) End Function |
| ||
Perfect, thanks for that Plash. I knew I was close ;) d. |