Copiar Array

02/08/2006 - 00:58 por Pablo Di Martino | Informe spam
Gente, hice la siguiente función para poder agregar un item a un array
ese item es una clase

public static void AgregarItemArray(ref Int_Web_Service_En.csSegmentos[]
aArray, Int_Web_Service_En.csSegmentos oObjeto)

{

Int_Web_Service_En.csSegmentos[] aArregloTemporal = null;

if (aArray == null)

aArregloTemporal = new Int_Web_Service_En.csSegmentos[1];

else

{

aArregloTemporal = new Int_Web_Service_En.csSegmentos[aArray.Length +1];

Array.Copy(aArray, aArregloTemporal, Math.Min(aArray.Length,
aArregloTemporal.Length));

}

aArregloTemporal[aArregloTemporal.Length -1] = oObjeto;

aArray = aArregloTemporal;

}



Ahora lo que quiero hacer es que esta función sea genérica (osea que agregue
un objeto cualquiera a un array cualquiera), probé declarando como Object
los dos parámetros pero a la hora de invocar a la funcion me dice que hay
error en los parámetros.



Como puedo solucionar este tema?

Gracias, Pablo

PD: Aclaro que no puedo utilizar un arraylist..

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
02/08/2006 - 10:37 | Informe spam
Pablo,

Ahora lo que quiero hacer es que esta función sea genérica...





Pues eso, crea un método genérico ;-)
Este recibe un array y un objeto, y devuelve un nuevo array con el nuevo
objeto agregado al final:

public T[] Añadir<T>(T[] a, T obj)

{

T[] nuevo = new T[a.Length + 1];

Array.Copy(a, nuevo, a.Length);

nuevo[a.Length] = obj;

return nuevo;

}



Salu2 - Octavio
Respuesta Responder a este mensaje
#2 Pablo
02/08/2006 - 15:38 | Informe spam
La función la he definido de la siguiente manera

public static object[] CopiarArray(object[] array, object objeto)
{
return array;
}

Pero cuando llamo a la función pasándole el arreglo de mis clases no compila
diciendo Cannot implicitly convert type 'object[]' to
'Telesoft.Comafi.Int_Web_Service_En.csDescriError[]'


"Octavio Hernandez" escribió:

Pablo,

>> Ahora lo que quiero hacer es que esta función sea genérica...

Pues eso, crea un método genérico ;-)
Este recibe un array y un objeto, y devuelve un nuevo array con el nuevo
objeto agregado al final:

public T[] Añadir<T>(T[] a, T obj)

{

T[] nuevo = new T[a.Length + 1];

Array.Copy(a, nuevo, a.Length);

nuevo[a.Length] = obj;

return nuevo;

}



Salu2 - Octavio





Respuesta Responder a este mensaje
#3 Octavio Hernandez
02/08/2006 - 16:51 | Informe spam
Pablo,

Creo que el error no está en la función ni en la llamada en sí, sino en que
intentas asignar el object[] resultante a un array
con elementos más específicos. Haz una conversión explícita:

csDescriError[] resultado = (csDescriError[]) CopiarArray(origen, obj);

En cualquier caso, el método genérico es más elegante y 100% type-safe...

Slds - Octavio



"Pablo" escribió en el mensaje
news:
La función la he definido de la siguiente manera

public static object[] CopiarArray(object[] array, object objeto)
{
return array;
}

Pero cuando llamo a la función pasándole el arreglo de mis clases no
compila
diciendo Cannot implicitly convert type 'object[]' to
'Telesoft.Comafi.Int_Web_Service_En.csDescriError[]'


"Octavio Hernandez" escribió:

Pablo,

>> Ahora lo que quiero hacer es que esta función sea genérica...

Pues eso, crea un método genérico ;-)
Este recibe un array y un objeto, y devuelve un nuevo array con el nuevo
objeto agregado al final:

public T[] Añadir<T>(T[] a, T obj)

{

T[] nuevo = new T[a.Length + 1];

Array.Copy(a, nuevo, a.Length);

nuevo[a.Length] = obj;

return nuevo;

}



Salu2 - Octavio





Respuesta Responder a este mensaje
#4 Pablo
02/08/2006 - 21:07 | Informe spam
Octavio hice los cambios pertinente, compila pero a la hora de ejecutar
tengo el siguiente error... "La conversión especificada no es válida"

Funcion (ejecuta perfecto)

public static object[] CopiarArray(object[] aArray, object oObjeto)
{
object[] aArregloTemporal = null;

if (aArray == null)
aArregloTemporal = new object[1];
else
{
aArregloTemporal = new object[aArray.Length +1];
Array.Copy(aArray, aArregloTemporal, Math.Min(aArray.Length,
aArregloTemporal.Length));
}

aArregloTemporal[aArregloTemporal.Length -1] = oObjeto;

return aArregloTemporal;
}


Llamado a la función
csDescriError[] oListaErrores;
csDescriError oDescriError = new csDescriError();

oDescriError.Descripcion = e.Message;
oDescriError.TipoError = csDescriError.eTipoError.eTipoError_NoControlado;

oListaErrores = (csDescriError[]) CopiarArray((object[])oListaErrores,
(object)oDescriError);


El error se produce cuando quiere asignar el resultado de CopiarArray a
oListaErrores.


Muchas gracias por tu ayuda, Pablo


"Octavio Hernandez" escribió:

Pablo,

Creo que el error no está en la función ni en la llamada en sí, sino en que
intentas asignar el object[] resultante a un array
con elementos más específicos. Haz una conversión explícita:

csDescriError[] resultado = (csDescriError[]) CopiarArray(origen, obj);

En cualquier caso, el método genérico es más elegante y 100% type-safe...

Slds - Octavio



"Pablo" escribió en el mensaje
news:
> La función la he definido de la siguiente manera
>
> public static object[] CopiarArray(object[] array, object objeto)
> {
> return array;
> }
>
> Pero cuando llamo a la función pasándole el arreglo de mis clases no
> compila
> diciendo Cannot implicitly convert type 'object[]' to
> 'Telesoft.Comafi.Int_Web_Service_En.csDescriError[]'
>
>
> "Octavio Hernandez" escribió:
>
>> Pablo,
>>
>> >> Ahora lo que quiero hacer es que esta función sea genérica...
>>
>> Pues eso, crea un método genérico ;-)
>> Este recibe un array y un objeto, y devuelve un nuevo array con el nuevo
>> objeto agregado al final:
>>
>> public T[] Añadir<T>(T[] a, T obj)
>>
>> {
>>
>> T[] nuevo = new T[a.Length + 1];
>>
>> Array.Copy(a, nuevo, a.Length);
>>
>> nuevo[a.Length] = obj;
>>
>> return nuevo;
>>
>> }
>>
>>
>>
>> Salu2 - Octavio
>>
>>
>>
>>
>>



Respuesta Responder a este mensaje
#5 Guillermo guille
03/08/2006 - 21:08 | Informe spam
No podrás nunca hacer esa conversión, al menos salvo que uses el código
"generic" que te mostró Octavio, con lo que simplemente tendrías que hacer
esto:
oListaErrores = CopiarArray<csDescriError>(oListaErrores, oDescriError);

El problema del código que devuelve object[] es que "object" es el tipo
elemental y no puedes "ampliar" un tipo de object a cualquier otro, al revés
si, es decir, de csDescriError lo puedes "reducir", ya que Object es el tipo
elemental.
Lo más que puedes hacer es usar un array de tipo object y acceder a los
elementos haciendo un "cast" al tipo adecuado:

object[] copia = CopiarArray(oListaErrores, oDescriError);

int n = 0;

foreach( object o in copia )

{

csDescriError de = (csDescriError)o;

Console.WriteLine("{0}: {1}, {2}", n++, de.Descripcion, de.TipoError);

}


Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Mentor Asociado de Solid Quality Learning Iberoamericana

Te invito a mi sitio: http://www.elguille.info/
Resuelve tus dudas en: http://foros.elguille.info/

"Pablo" escribió en el mensaje
news:
Octavio hice los cambios pertinente, compila pero a la hora de
ejecutar
tengo el siguiente error... "La conversión especificada no es válida"

Funcion (ejecuta perfecto)

public static object[] CopiarArray(object[] aArray, object oObjeto)
{
object[] aArregloTemporal = null;

if (aArray == null)
aArregloTemporal = new object[1];
else
{
aArregloTemporal = new object[aArray.Length +1];
Array.Copy(aArray, aArregloTemporal, Math.Min(aArray.Length,
aArregloTemporal.Length));
}

aArregloTemporal[aArregloTemporal.Length -1] = oObjeto;

return aArregloTemporal;
}


Llamado a la función
csDescriError[] oListaErrores;
csDescriError oDescriError = new csDescriError();

oDescriError.Descripcion = e.Message;
oDescriError.TipoError = csDescriError.eTipoError.eTipoError_NoControlado;

oListaErrores = (csDescriError[]) CopiarArray((object[])oListaErrores,
(object)oDescriError);


El error se produce cuando quiere asignar el resultado de CopiarArray a
oListaErrores.


Muchas gracias por tu ayuda, Pablo


"Octavio Hernandez" escribió:

Pablo,

Creo que el error no está en la función ni en la llamada en sí, sino en
que
intentas asignar el object[] resultante a un array
con elementos más específicos. Haz una conversión explícita:

csDescriError[] resultado = (csDescriError[]) CopiarArray(origen,
obj);

En cualquier caso, el método genérico es más elegante y 100% type-safe...

Slds - Octavio



"Pablo" escribió en el mensaje
news:
> La función la he definido de la siguiente manera
>
> public static object[] CopiarArray(object[] array, object objeto)
> {
> return array;
> }
>
> Pero cuando llamo a la función pasándole el arreglo de mis clases no
> compila
> diciendo Cannot implicitly convert type 'object[]' to
> 'Telesoft.Comafi.Int_Web_Service_En.csDescriError[]'
>
>
> "Octavio Hernandez" escribió:
>
>> Pablo,
>>
>> >> Ahora lo que quiero hacer es que esta función sea genérica...
>>
>> Pues eso, crea un método genérico ;-)
>> Este recibe un array y un objeto, y devuelve un nuevo array con el
>> nuevo
>> objeto agregado al final:
>>
>> public T[] Añadir<T>(T[] a, T obj)
>>
>> {
>>
>> T[] nuevo = new T[a.Length + 1];
>>
>> Array.Copy(a, nuevo, a.Length);
>>
>> nuevo[a.Length] = obj;
>>
>> return nuevo;
>>
>> }
>>
>>
>>
>> Salu2 - Octavio
>>
>>
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida