No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Implementaci贸n de un diccionario

16/35
Recursos

Aportes 21

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

鈥 De hecho en la colecci贸n de Cursos dentro del .Add() que invocamos del diccionario NO es necesario invocarlo. La raz贸n de esto es porque no necesita su invocaci贸n debido a que Cursos es de un tipo 鈥淟ist<Curso>鈥, la cual implementa la interfaz 鈥淚Enumerable<T>鈥. De hecho al invocar al m茅todo .Add() de nuestro diccionario se me ocurri贸 a帽adir dentro del 鈥淰alue鈥 una lista de ObjetoEscuelaBase inicializada con un elemento, que es nuestra Escuela. De tal forma que el c贸digo me qued贸 de esta forma sin que el compilador me protestara por hacerlo as铆:

        public Dictionary<string, IEnumerable<ObjetoEscuelaBase>> GetDiccionarioObjetos()
        {
            var diccionario = new Dictionary<string, IEnumerable<ObjetoEscuelaBase>>();

            diccionario.Add("Escuela", new List<ObjetoEscuelaBase> { Escuela });
            diccionario.Add("Cursos", Escuela.Cursos);

            return diccionario;
        }

Entiendo que el uso del M茅todo Cast() en las colecciones sirve precisamente para convertir CADA ELEMENTO CONTENIDO de un tipo a otro.

Esto lo pueden corroborar en el libro titulado: 鈥淭raining Kit - 70-516 Accessing Data With Microsoft .Net Framework 4鈥, Editorial Microsoft Press, pagina167, chapter 3: Undestanding Linq.

Saludos.

chale algo confusa

Y si a煤n hay duda del por qu茅 en C# actual ya no es necesario 鈥淐astear鈥 cada uno de los elementos de una colecci贸n que implementa IEnumerable<T> Les recomiendo este art铆culo:
https://docs.microsoft.com/es-es/previous-versions/ee207183(v=vs.120)

Saludos a todos y que tengan muy buen curso.

As铆 tambien funciona sin necesidad de hacer el cast.

 public Dictionary<string, IEnumerable<ObjetoEscuelaBase>> GetDiccionarioObjetos()
        {
            var diccionario = new Dictionary<string, IEnumerable<ObjetoEscuelaBase>>();

            diccionario.Add("Escuela", new List<ObjetoEscuelaBase> { Escuela });
            diccionario.Add("Cursos", Escuela.Cursos );

            return diccionario;
        }

Siento que esta clase es bastante avanzada, hay que poner mucha atenci贸n y recordar lo que se hizo antes al aprender polimorfismo y cast para entenderla bien. 馃槷

Bastante confusa esta clase, no entendi

por alguna razon, no necesit茅 hacerle cast, acept贸 los cursos como tal.


            var dictionary = new Dictionary<string, IEnumerable<Inheritor>>{};
            dictionary.Add("Escuela", new[]{schoolCopy1});
            dictionary.Add("Course", schoolCopy1.schoolCourses);
            var debugPoint = 0;




No entiendo por que el 鈥渃asteo鈥 a escuela.cursos, si se supone que escuela.cursos es una lista de cursos, que hereda de objetosEscuelaBase

Teniendo en cuenta:
Dictionary<key, value> dictionary = new Dictionary<key, value>();
Al agregar un valor se puede realizar de las siguientes dos maneras:
1- dictionary.Add(鈥渒ey鈥, 鈥渧alue鈥);

2- dictionary[鈥渒ey鈥漖 = 鈥渧alue鈥;
La primer opci贸n agrega, siendo que la segunda opci贸n iguala, por lo que si se utiliza mas de dos veces la segunda opci贸n en la primera lo agregar谩, pero en la segunda lo igualar谩 o reemplazar谩. Mientras que en la primera opci贸n la primera vez lo agregar谩, pero en la segunda ocasi贸n marcara una excepci贸n porque la llave ya estaba en el diccionario.

Tal vez es un mal ejemplo.
Se est谩 implementando un m茅todo que tiene demasiadas responsabilidades: devolver muchas cosas al mismo tiempo. Se ve muy forzado devolver la escuela en un array de 1, etc. Pienso que rompe principios de orientaci贸n a objetos (SOLID).

haciendo casting a los objetos jjajjaja

Esta clase la considero un claro ejemplo del uso de listas polim贸rficas, que conociendo la estructura u herencia de los objetos puedes hacer tantas combinaciones y/o recorridos de tus objetos como necesites.

Supongo que el concepto es intentar hacer una especie de JSON-Singleton con los datos de la escuela para consulta indexada, 驴no?

Como seria la serializacion de un dictionario json en core
Ejemplo de json
{
鈥渁rrayColores鈥:[{
鈥渘ombreColor鈥:鈥渞ojo鈥,
鈥渧alorHexadec鈥:"#f00"
},
{
鈥渘ombreColor鈥:鈥渧erde鈥,
鈥渧alorHexadec鈥:"#0f0"
},
{
鈥渘ombreColor鈥:鈥渁zul鈥,
鈥渧alorHexadec鈥:"#00f"
},
{
鈥渘ombreColor鈥:鈥渃yan鈥,
鈥渧alorHexadec鈥:"#0ff"
},
{
鈥渘ombreColor鈥:鈥渕agenta鈥,
鈥渧alorHexadec鈥:"#f0f"
},
{
鈥渘ombreColor鈥:鈥渁marillo鈥,
鈥渧alorHexadec鈥:"#ff0"
},
{
鈥渘ombreColor鈥:鈥渘egro鈥,
鈥渧alorHexadec鈥:"#000"
}
]
}

Con esta linea se arregla todo:

var diccionario = new Dictionary<string, List<ObjetoEscuelaBase>>();

Alguien me podr铆a decir en que clase explica un error que se genera en c贸digo de bajo nivel, donde un aconversion explicita hace que el codigo ensamblador lo maneja con un stack y hace que trabaje mas. Algo asi no recuerdo muy bien.

Aqui est谩 el c贸digo si se quiere que retorne un diccionario de tipo

Dictionary<string, List<ObjetoEscuelaBase>>
public Dictionary<string, List<ObjetoEscuelaBase>> GetDiccionarioObjetos()
        {
            var diccionario = new Dictionary<string, List<ObjetoEscuelaBase>>();
            diccionario.Add("Escuela", new List<ObjetoEscuelaBase>(){Escuela});
            diccionario.Add("Cursos", Escuela.Cursos.Cast<ObjetoEscuelaBase>().ToList());
            return diccionario;
        }```

El uso del Cast para Cursos no es necesario.

Excelente contenido es genial muy genial

Entiendo que otra manera de agregar los cursos al diccionario puede ser con un ciclo FOR, alguien que me diga si me equivoco.

public Dictionary<string, ObjetoEscuelaBase> GetDiccionarioObjetos()
        {
            var diccionario = new Dictionary<string, ObjetoEscuelaBase>();
            diccionario.Add("Escuela", Escuela);
            for (int i = 0; i < Escuela.Cursos.Count; i++)
            {
                diccionario.Add($"Curso {i}", Escuela.Cursos[i]);
            }
            return diccionario;
        }
public Dictionary<string, IEnumerable<ObjetoEscuelaBase>> GetDiccionarioObjetos()
        {
            var diccionario = new Dictionary<string, IEnumerable<ObjetoEscuelaBase>>();

            diccionario.Add("Escuela", new List<ObjetoEscuelaBase> { Escuela });
            diccionario.Add("Cursos", Escuela.Cursos);

            return diccionario;
        }```