redimensionar arreglo

01/12/2005 - 10:57 por Pedro Rivera | Informe spam
Tengo el siguiente codigo para redimensionar un arreglo de elementos "bool":

public static void Redimensionar(ref bool[] arreglo, int nuevoTamanio)
{
if(arreglo==null){arreglo=new bool[1]; return;}
if(nuevoTamanio<1){nuevoTamanio=1;}
else if(nuevoTamanio>2147483640){nuevoTamanio!47483640;}
int tamanio=arreglo.GetLength(0);
bool[] objetos=new bool[tamanio];
for(int i=0;i<tamanio;i++){objetos[i]=arreglo[i];}
arreglo=new bool[nuevoTamanio];
int mayor=0;
if(nuevoTamanio>tamanio){mayor=tamanio;}
else{mayor=nuevoTamanio;}
for(int i=0;i<mayor;i++){arreglo[i]=objetos[i];}
}

Mi pregunta es: ¿Como hago para que el codigo anterior sea generico, es
decir, para aplicarlo a un arreglo de cualquier tipo de objetos, no solo
"bool"?
He estado tratando de hacerlo con Reflection pero no lo consigo. Gracias.

Preguntas similare

Leer las respuestas

#1 A.Poblacion
01/12/2005 - 11:26 | Informe spam
"Pedro Rivera" wrote in message
news:
[...]
Mi pregunta es: ¿Como hago para que el codigo anterior sea generico, es
decir, para aplicarlo a un arreglo de cualquier tipo de objetos, no solo
"bool"?



Tienes que pasarte a C# 2.0 (Visual Studio 2005). En esta versión hay
una funcionalidad que se llama "Generics" y que sirve precisamente para
hacer lo que tú quieres.
Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
01/12/2005 - 16:17 | Informe spam
Podrias hacer algo asi:

public static Array Redim(Array array, int elementos) {

if (array == null)
throw new ArgumentNullException();

if (elementos < 0)
throw new ArgumentException();

Array nueva =
Array.CreateInstance(array.GetType().GetElementType(),elementos);

if (elementos > array.Length)
elementos = array.Length;

array.CopyTo(nueva, elementos);

return nueva;

}

bool[] b = new bool[5];
string[] s = new string[5];

b = (bool[]) Redim(b, 20);
s = (string[]) Redim(s, 20);

Y podrias encapsular la llamadas en otras sobrecargas para simplificar el
uso con los tipos mas comunes:

public static void Redim(ref bool[] b, int elementos) {
b = (bool[]) Redim(b, elementos);
}

public static void Redim(ref string[] s, int elementos) {
s = (string[]) Redim(s, elementos);
}

Redim(ref b, 10);
Redim(ref s, 10);

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida