No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

13 Días
11 Hrs
13 Min
34 Seg

Implementación de un diccionario

16/35
Recursos

Aportes 23

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

… 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 “List<Curso>”, la cual implementa la interfaz “IEnumerable<T>”. De hecho al invocar al método .Add() de nuestro diccionario se me ocurrió añadir dentro del “Value” 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: “Training 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 “Castear” 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

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).

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 “casteo” 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(“key”, “value”);
ó
2- dictionary[“key”] = “value”;
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.

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
{
“arrayColores”:[{
“nombreColor”:“rojo”,
“valorHexadec”:"#f00"
},
{
“nombreColor”:“verde”,
“valorHexadec”:"#0f0"
},
{
“nombreColor”:“azul”,
“valorHexadec”:"#00f"
},
{
“nombreColor”:“cyan”,
“valorHexadec”:"#0ff"
},
{
“nombreColor”:“magenta”,
“valorHexadec”:"#f0f"
},
{
“nombreColor”:“amarillo”,
“valorHexadec”:"#ff0"
},
{
“nombreColor”:“negro”,
“valorHexadec”:"#000"
}
]
}

No se entiende muy bien la explicaciòn, creo que es muy confuso.

Esta clase tiene un pequeño error, cuando cambia del tipo List a IEnumerable solo cambió el tipo del método y no cambió el tipo del valor de retorno, y eso le causó los problemas de casteo.

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;
        }```