Hola a todos tengo un programa que permite al usuario introducir datos y estos deben ser almacenados en structs, vale hasta aquí no hay problema si se la cantidad de structs que va a utilizar el usuario por ejemplo 3 structs los declaro y después solo tendría que ir asignando la cuestión está en que no sabré cuantos struct introducirá el usuario entonces mi duda viene en que como puedo crear los struct en tiempo de ejecución con el nombre que introduzca el usuario es decir, no se como puedo hacer para darle nombre a un struct o a una variable en tiempo de ejecución y que sea un nombre que por ejemplo haya sido recogido en una variable (por poner un ejemplo), no se si es con eso del preprocesador ese o creando una clase y crear instancias y jugar con eso, en fin cuál sería la forma correcta de hacer esto? Gracias y un saludo es en C#
Estás contando la forma en la que has decidido resolver un problema, es decir estás explicando la solución que tienes pensada, pero no has mencionado cual es el problema que te ha llevado a enfocarte en esa solución...
A mi no me cuentes eso, da detalles claros y específicos.
Cuéntanos el propósito que hay detrás de lo que estás intentando hacer, es decir, ¿con que intención quieres hacer eso, que es lo que quieres resolver haciendo eso y de esa manera en específico?, y no me digas que el motivo es "
para poder introducir datos"
. Más que nada si insisto en que des esta información (por que nunca la das) es por que puede que explicándonos el problema podamos hallar una solución más...óptima a las circunstancias y a tus necesidades reales.
De todas formas, respondiendo a tus dudas y extendiendo la respuesta del compañero @NEBIRE:
Para declarar un array de estructuras de tamaño "indeterminado" cuyo tamaño lo determinas en tiempo de ejecución, pues tan solo tienes que declararlo e inicializarlo de la siguiente manera:
int structSize = 10;
ValueType
[] structs
= new ValueType
[structSize
];
...Donde el valor de la variable
structSize lo proveería el usuario en tiempo de ejecución mediante tu interfáz gráfica o como sea, y ya te encargarías de controlarlo como sea que lo tengas pensado hacer.
Y con respecto a la asignación de nombres dinámicos a variables, eso no es algo posible en C#, sin embargo puedes utilizar cualquiera de los tipos de estructuras de datos en .NET que implementan los principios de un Array Asociativo, una estructura de datos de tipo
key/value. por ejemplo una colección que implemente la interfáz
IDictionary o
ICollection<KeyValuePair<TKey, TValue>> para permitirte asignarle identificadores/keys cuyos nombres sean creados de forma dinámica en tiempo de ejecución. Por ejemplo puedes usar el tipo
SortedDictionary<TKey, TValue>:
int structSize = 10;
int keyIndex = 1;
string keyName = string.Format("Key{0}", keyIndex); // "Key1"
Dictionary
<string, ValueType
[]> dict
= new SortedDictionary
<string, ValueType
[]>(StringComparer
.Ordinal);dict
.Add(keyName,
new ValueType
[structSize
]);// ...
ValueType[] structs = dict(keyName);
...Donde las variables
structSize y
keyIndex y/o
keyName tendrian un valor dinámico cuando adaptases el código a tus necesidades.
Saludos!