visual tamaño redimensionar permitir maximizar mas hacer grande formularios formulario form fijo evitar escala controles como cambiar automático ajuste ajustar c# arrays size

redimensionar - no permitir cambiar el tamaño de un form c#



cambiar el tamaño de la matriz (14)

En C #, Array.Resize es el método más simple para cambiar el tamaño de cualquier matriz a un nuevo tamaño, por ejemplo:

Array.Resize<LinkButton>(ref area, size);

Aquí, quiero cambiar el tamaño de la matriz de la matriz LinkButton:

<LinkButton> = especifica el tipo de matriz
ref area = ref es una palabra clave y ''area'' es el nombre de la matriz
size = nueva matriz de tamaño

¿Es posible cambiar el tamaño de una matriz después de la declaración? Si no, ¿hay alguna alternativa a los arreglos?
No quiero crear una matriz con un tamaño de 1000, pero no sé el tamaño de la matriz cuando la estoy creando.


En C #, las matrices no pueden redimensionarse dinámicamente.

  • Un enfoque es utilizar System.Collections.ArrayList lugar de una native array .

  • Otra solución (más rápida) es volver a asignar la matriz con un tamaño diferente y copiar el contenido de la matriz antigua a la nueva matriz.

    La función genérica resizeArray (abajo) se puede usar para hacer eso.

    public static System.Array ResizeArray (System.Array oldArray, int newSize) { int oldSize = oldArray.Length; System.Type elementType = oldArray.GetType().GetElementType(); System.Array newArray = System.Array.CreateInstance(elementType,newSize); int preserveLength = System.Math.Min(oldSize,newSize); if (preserveLength > 0) System.Array.Copy (oldArray,newArray,preserveLength); return newArray; } public static void Main () { int[] a = {1,2,3}; a = (int[])ResizeArray(a,5); a[3] = 4; a[4] = 5; for (int i=0; i<a.Length; i++) System.Console.WriteLine (a[i]); }


En caso de que no pueda usar Array.Reset (la variable no es local), Concat & ToArray ayuda a:

anObject.anArray.Concat(new string[] { newArrayItem }).ToArray();


Esto me funcionó bien para crear una matriz dinámica a partir de una matriz de clase.

var s = 0; var songWriters = new SongWriterDetails[1]; foreach (var contributor in Contributors) { Array.Resize(ref songWriters, s++); songWriters[s] = new SongWriterDetails(); songWriters[s].DisplayName = contributor.Name; songWriters[s].PartyId = contributor.Id; s++; }


No, intente usar una List fuertemente tipada en su lugar.

Por ejemplo:

En lugar de usar

int[] myArray = new int[2]; myArray[0] = 1; myArray[1] = 2;

Podrías hacer esto:

List<int> myList = new List<int>(); myList.Add(1); myList.Add(2);

Las listas utilizan matrices para almacenar los datos, de modo que puede obtener el beneficio de la velocidad de las matrices con la conveniencia de una lista LinkedList al poder agregar y eliminar elementos sin tener que preocuparse por tener que cambiar manualmente su tamaño.

Sin embargo, esto no significa que el tamaño de una matriz (en este caso, una List ) no haya cambiado, de ahí el énfasis en la palabra manualmente.

Tan pronto como su matriz alcance su tamaño predefinido, el JIT asignará una nueva matriz en el montón que es el doble del tamaño y copiará la matriz existente.


Puede usar Array.Resize() , documentado en MSDN .

Pero sí, estoy de acuerdo con Corey, si necesita una estructura de datos de tamaño dinámico, tenemos List para eso.

Importante: Array.Resize() no Array.Resize() tamaño de la matriz (el nombre del método es engañoso), crea una nueva matriz y solo reemplaza la reference que se pasó al método.

Un ejemplo:

var array1 = new byte[10]; var array2 = array1; Array.Resize<byte>(ref array1, 20); // Now: // array1.Length is 20 // array2.Length is 10 // Two different arrays.


Puede usar Array.Resize() en .net 3.5 y superior. Este método asigna una nueva matriz con el tamaño especificado, copia los elementos de la matriz anterior a la nueva, y luego reemplaza la matriz antigua por la nueva. (Por lo tanto, necesitará la memoria disponible para ambos arreglos, ya que probablemente utilice Array.Copy debajo de las cubiertas)


Sí, es posible cambiar el tamaño de una matriz. Por ejemplo:

int[] arr = new int[5]; // increase size to 10 Array.Resize(ref arr, 10); // decrease size to 3 Array.Resize(ref arr, 3);

Si crea una matriz con el método CreateInstance (), el método Resize () no funciona. Por ejemplo:

// create an integer array with size of 5 var arr = Array.CreateInstance(typeof(int), 5); // this not work Array.Resize(ref arr, 10);

El tamaño del arreglo no es dinámico, incluso podemos redimensionarlo. Si quieres una matriz dinámica, creo que podemos usar la lista genérica.

var list = new List<int>(); // add any item to the list list.Add(5); list.Add(8); list.Add(12); // we can remove it easily as well list.Remove(5); foreach(var item in list) { Console.WriteLine(item); }


Se utiliza este enfoque para la matriz de bytes:

Inicialmente:

byte[] bytes = new byte[0];

Cuando sea necesario (necesidad de proporcionar longitud original para extender):

Array.Resize<byte>(ref bytes, bytes.Length + requiredSize);

Reiniciar:

Array.Resize<byte>(ref bytes, 0);

Método de lista tipeada

Inicialmente:

List<byte> bytes = new List<byte>();

Cuando sea necesario:

bytes.AddRange(new byte[length]);

Liberar / Borrar:

bytes.Clear()



Utilice una List<T> lugar. Por ejemplo, en lugar de una matriz de entradas

private int[] _myIntegers = new int[1000];

utilizar

private List<int> _myIntegers = new List<int>();

luego

_myIntegers.Add(1);


Utilice una Lista (donde T es cualquier tipo u Objeto) cuando desee agregar / eliminar datos, ya que cambiar el tamaño de las matrices es costoso. Puede leer más acerca de las matrices consideradas algo dañinas, mientras que se puede agregar una Lista a los registros Nuevos al final. Ajusta su tamaño según sea necesario.

Una lista puede ser inicializada de las siguientes maneras.

Utilizando inicializador de colección.

List<string> list1 = new List<string>() { "carrot", "fox", "explorer" };

Utilizando la palabra clave var con inicializador de colección.

var list2 = new List<string>() { "carrot", "fox", "explorer" };

Usando nueva matriz como parámetro.

string[] array = { "carrot", "fox", "explorer" }; List<string> list3 = new List<string>(array);

Uso de capacidad en constructor y asignación.

List<string> list4 = new List<string>(3); list4.Add(null); // Add empty references. (Not Recommended) list4.Add(null); list4.Add(null); list4[0] = "carrot"; // Assign those references. list4[1] = "fox"; list4[2] = "explorer";

Usando el método Add para cada elemento.

List<string> list5 = new List<string>(); list5.Add("carrot"); list5.Add("fox"); list5.Add("explorer");

Por lo tanto, para una Lista de objetos, puede asignar y asignar las propiedades de los objetos en línea con la inicialización de la Lista. Los inicializadores de objetos y los inicializadores de colecciones comparten una sintaxis similar.

class Test { public int A { get; set; } public string B { get; set; } }

Inicializar lista con inicializador de colección.

List<Test> list1 = new List<Test>() { new Test(){ A = 1, B = "Jessica"}, new Test(){ A = 2, B = "Mandy"} };

Inicializar lista con nuevos objetos.

List<Test> list2 = new List<Test>(); list2.Add(new Test() { A = 3, B = "Sarah" }); list2.Add(new Test() { A = 4, B = "Melanie" });


Utilice una lista genérica (System.Collections.Generic.List).


private void HandleResizeArray() { int[] aa = new int[2]; aa[0] = 0; aa[1] = 1; aa = MyResizeArray(aa); aa = MyResizeArray(aa); } private int[] MyResizeArray(int[] aa) { Array.Resize(ref aa, aa.GetUpperBound(0) + 2); aa[aa.GetUpperBound(0)] = aa.GetUpperBound(0); return aa; }