Foros del Web » Programación para mayores de 30 ;) » .NET »

Objeto Custom

Estas en el tema de Objeto Custom en el foro de .NET en Foros del Web. Hola De verdad yo creo hoy no es mi dia, ya que no puedo resolver algo "sencillo" y he venido hoy a pedir su apoyo. ...
  #1 (permalink)  
Antiguo 20/05/2016, 14:50
 
Fecha de Ingreso: agosto-2015
Mensajes: 5
Antigüedad: 9 años, 3 meses
Puntos: 0
Objeto Custom

Hola

De verdad yo creo hoy no es mi dia, ya que no puedo resolver algo "sencillo" y he venido hoy a pedir su apoyo.

Quiero crear un Objeto Custom con los siguientes campos.

Objeto Registro

Dentro de objeto Registro, debo tener una coleccion (lista de string) de Nombre, dentro de cada Nombre debe haber otra lista de Valores (string), al final como quiero llenarlo es asi.

Código:
Registro.Nombre = unobjeto.ToList();
Y luego

Código:
Registro.Nombre[x].Valores = otroobjeto.ToList();
Me podrian echar una mano por favor.

Saludos.
  #2 (permalink)  
Antiguo 20/05/2016, 15:02
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 10 meses
Puntos: 52
Respuesta: Objeto Custom

Cita:
Iniciado por guerreroM Ver Mensaje
Dentro de objeto Registro, debo tener una coleccion (lista de string) de Nombre, dentro de cada Nombre debe haber otra lista de Valores (string)
Tenés un error conceptual en tu diseño. Un string, por definición, no contiene nada más que una cadena de texto, por ejemplo "Hola". No puede un string contener una lista de nada (tal vez de char, pero no es el caso), por lo tanto tu Lista de String no sirve para que cada item a su vez contenga otra lista de string.

Como alternativa lo que yo haría es crear una estructura anidada o de árbol, así:

Código C#:
Ver original
  1. public class Registro
  2. {
  3.     public string Name {get; set;}
  4.    
  5.     public List<Registro> Children {get;} = new List<Registro>();
  6. }

entonces cada Registro tiene un nombre, y una lista de Registros hijos, que a su vez cada uno tiene un nombre, y una lista de Registros... ad infinitum.

Otra alternativa es usar un Dictionary<string, List<string>>, por ejemplo.

Última edición por agleiva; 20/05/2016 a las 15:07
  #3 (permalink)  
Antiguo 20/05/2016, 15:19
 
Fecha de Ingreso: agosto-2015
Mensajes: 5
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Objeto Custom

Muchas gracias por responder, pero no pude resolver el problema, te explico con el ejemplo real para ver si tienes una idea mas precisa.

Estoy leyendo un Excel, que tiene muchos libros, y cada libro tiene muchos registros, entonces lo que planeaba hacer, era contruir un objeto unico, para tener mejor control sobre el.

Entonces, actualmente obtengo los nombres de los libros asi.

Código:
var worksheetNames = excelSheet.GetWorksheetNames().ToList();
Esto me retorna una lista de string, con los nombres.

Una ves teniendo el nombre, obtengo los registros por aparte.

Código:
List<RegistrosExcel> Resultado = new List<RegistrosExcel>();
Resultado = excel.ToEntidadHojaExcelList(fichero, worksheetNames[z]);
Entonces, tengo un for que va recorriendo y llenando ese resultado y proceso, y asi, entonces mi idea es como lo planteaba arriba, para evitar ese llenado que lleva tiempo.

Código:
//Asi es como lo necesito pero no lo consigo
MiObjeto[z].Registros = excel.ToEntidadHojaExcelList(fichero, worksheetNames[z]);
Para luego leerlo mas facil.

Código:
MiObjeto[z].Registros[i].Algo etc.
Saludos.
  #4 (permalink)  
Antiguo 21/05/2016, 15:25
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 10 meses
Puntos: 52
Respuesta: Objeto Custom

No tiene mucho sentido crear una clase para lo que estás planteando, porque como te dije con un Dictionary<string, List<XXX>> lo resolvés.

Yo lo que haría es esto:

Código C#:
Ver original
  1. var worksheetNames = excelSheet.GetWorksheetNames().ToList();
  2. var worksheets = worksheetNames.ToDictionary(x => x, x => excel.ToEntidadHojaExcelList(fichero, x));

entonces después podés acceder así:

Código C#:
Ver original
  1. var algo = worksheets["Hoja1"][0].Algo;

donde "Hoja1" es el worksheet name y el 0 es el row index. O si querés iterar por todas las worksheets:

Código C#:
Ver original
  1. foreach (var w in worksheets)
  2. {
  3.     foreach (var r in w.Value)
  4.     {
  5.         var algo = r.Algo;
  6.     }
  7. }

Olvidate de usar for, y usá foreach que no te introduce una variable índice que no necesitás.

Etiquetas: custom, objeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:00.