No se puede ensanchar de tipo de destino a tipo primitivo !!

20/10/2005 - 16:33 por Elvio Velasquez | Informe spam
Hola como estan gente sabia del grupo, queria preguntarles por que no puede
encontrar la solucion a este error
Tengo una clase cuyo unos de los metodos recibe un array como parametros

function Ejecutar (byval Paramarray parametros() as object) as object

.
,,,,

end function

Luego para llamar el metodo creo un array y voy cargandolos con valores
dentro de un bucle haciedno redim en cada paso

dim param() as double
dim j as integer = 0

for each pa
redim preserve param(j)
param(j) = valor
j = j+1

next

y luego

clase.ejecutar(param)

pues ahi me da ese error cuando paso el array como parametro me dice lo
siguiente
No se puede ensanchar de tipo de destino a tipo primitivo

??? a que se debe este error, es un tema de como manejo los arrrays ??
Bueno si tienen alguna sugerencia se las agradeceria

Saludos-.
Elvio

Preguntas similare

Leer las respuestas

#1 A.Poblacion
20/10/2005 - 16:39 | Informe spam
"Elvio Velasquez" wrote in message
news:eDc$
Tengo una clase cuyo unos de los metodos recibe un array como parametros

function Ejecutar (byval Paramarray parametros() as object) as object
[...]
dim param() as double
[...]
clase.ejecutar(param)



Tendrías que quitar la palabra Paramarray en la declaración de la
función. Esto se usa para pasarle a la función un número de argumentos
variable. En tu caso, le estás pasando un array, el cual interpreta como
primer elemento del array interno que usa para guardar la lista variable de
parámetros, con lo que la función al final trata un array de object que
contiene un único elemento que es un array de double. Evidentemente, no es
esto lo que quieres. Lo más sencillo es que declares la función simplemente
asi:
function Ejecutar (byval parametros() as double) as object
De esta manera recibe un array de doubles que es lo que le estás pasando.
Respuesta Responder a este mensaje
#2 Leonardo Azpurua [mvp vb]
20/10/2005 - 16:57 | Informe spam
"Elvio Velasquez" escribió en el mensaje
news:eDc$
Hola como estan gente sabia del grupo, queria preguntarles por que no
puede
encontrar la solucion a este error
Tengo una clase cuyo unos de los metodos recibe un array como parametros

function Ejecutar (byval Paramarray parametros() as object) as object

.
,,,,

end function

Luego para llamar el metodo creo un array y voy cargandolos con valores
dentro de un bucle haciedno redim en cada paso

dim param() as double
dim j as integer = 0

for each pa
redim preserve param(j)
param(j) = valor
j = j+1

next

y luego

clase.ejecutar(param)

pues ahi me da ese error cuando paso el array como parametro me dice lo
siguiente
No se puede ensanchar de tipo de destino a tipo primitivo

??? a que se debe este error, es un tema de como manejo los arrrays ??
Bueno si tienen alguna sugerencia se las agradeceria

Saludos-.
Elvio



Hola, Elvio:

En .NET existe una diferencia fundamental entre dos "familias" de tipos: los
"tipos por valor", que corresponden a todos los tipos numéricos,
enumeraciones y estructuras, y los tipos por referencia que son las clases
(aproximadamente).

Cuando usas una propiedad de una variable Double, por ejemplo
miDouble.ToString("c"), el compilador realiza una operación llamada "Boxing"
(empaquetamiento) para convertir temporalmente ese Double a una instancia de
una clase que provee la funcionalidad requerida. Pero cuando declaras una
variable Double lo que haces es reservar espacio para almacenar un numero
Double comun y corriente.

Cuando declaras un Array de objetos, el compilador entiende que quieres
reservar un area de memoria para una lista de referencias a objetos de algun
tipo por referencia. Cuando declaras un array de Doubles, se reserva un area
de memoria para guardar una lista de numeros double (tipo por valor, o tipo
primitivo). Un double puede convertirse a un objeto, pero un array de
doubles no es un array de objetos, dado que un Double no *es* un objeto
(aunque un valor Double aislado pueda ser tratado como si lo fuera).

Una solución podría ser que declararas el array que pasas como argumento As
Object( ). Al asinar un valor Double a un array de Object, se produce un
Boxing del valor, que lo hace compatible con el tipo base Object. Esto
funciona, pero es costoso en rendimiento.

La otra podría ser que sobrecargues el metodo:

Public Sub Ejecutar(Arg As Double()) ...
Public Sub Ejecutar(Arg As Integer()) ...

de manera que puedas llamarlo con arrays de diferentes tipos primitivos.

Salud!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida