Get/SetArrayElement() reflection problem

BlitzMax Forums/BlitzMax Beginners Area/Get/SetArrayElement() reflection problem

Danny(Posted 2010) [#1]
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



plash(Posted 2010) [#2]
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



Danny(Posted 2010) [#3]
Perfect, thanks for that Plash.
I knew I was close ;)

d.