none
Crear método tipado RRS feed

  • Pregunta

  • Buenos días.

    Como puedo convertir el siguiente código a un método donde le pase por parámetro los tipos

                        foreach (Triangulo item in Tcoleccion)
                        {
                            Point p = AreaDraw.PointToClient(Cursor.Position);
                            if (item.Dentro(p))
                            {
                                Tselec = item;
                                pos = p;
                                break;
                            }
                        }
                        foreach (Rombo item in Rcoleccion)
                        {
                            Point p = AreaDraw.PointToClient(Cursor.Position);
                            if (item.Dentro(p))
                            {
                                Rselec = item;
                                pos = p;
                                break;
                            }
                        }
                        foreach (Cuadrado item in Cdrocoleccion)
                        {
                            Point p = AreaDraw.PointToClient(Cursor.Position);
                            if (item.Dentro(p))
                            {
                                Cdroselec = item;
                                pos = p;
                                break;
                            }
                        }

    He probado hacer esto:

    private void PunteroColeccion<T>(List<T> coleccion, T tipoItem, T tipoSelec)
    {
        foreach (var item in coleccion)
        {
            Point p = AreaDraw.PointToClient(Cursor.Position);
            if (item.Dentro(p)) //Me falla por culpa del método Dentro
            {
                tipoSelec = item;
                pos = p;
                break;
            }
        }
    }

    Pero me falla a consecuencia dle método item.Dentro(p)

    Como puedo solucionarlo.

    Muchas gracias.

    martes, 16 de junio de 2020 22:04

Respuestas

  • Hola. Ese método que estás implementando debería estar en una clase genérica en la cual el tipo T debe tener una restricción o "constraint". Doy por supuesto que tanto Triangulo, Rombo y Cuadrado heredan de una clase base denominada Figura

    class MiClase<T> where T : Figura
    {
    public void PunteroColeccion<T>(List<T> coleccion, T tipoItem, T tipoSelec)
    {
        foreach (var item in coleccion)
        {
            Point p = AreaDraw.PointToClient(Cursor.Position);
            if (item.Dentro(p)) //Me falla por culpa del método Dentro
            {
                tipoSelec = item;
                pos = p;
                break;
            }
        }
    }
    } 
    
    

    Supongo también que el método Dentro() está definida en la clase base.(abstracta quizá?) 

    Para más información de las restricciones Restricciones de tipos de parámetros (Guía de programación de C#)


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 17 de junio de 2020 1:41
    Moderador

Todas las respuestas

  • hola

    >>Pero me falla a consecuencia dle método item.Dentro(p)

    Cual es el codigo de Dentro() ?

    Que dice el mensaje del error cuando falla ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de junio de 2020 23:47
  • Hola. Ese método que estás implementando debería estar en una clase genérica en la cual el tipo T debe tener una restricción o "constraint". Doy por supuesto que tanto Triangulo, Rombo y Cuadrado heredan de una clase base denominada Figura

    class MiClase<T> where T : Figura
    {
    public void PunteroColeccion<T>(List<T> coleccion, T tipoItem, T tipoSelec)
    {
        foreach (var item in coleccion)
        {
            Point p = AreaDraw.PointToClient(Cursor.Position);
            if (item.Dentro(p)) //Me falla por culpa del método Dentro
            {
                tipoSelec = item;
                pos = p;
                break;
            }
        }
    }
    } 
    
    

    Supongo también que el método Dentro() está definida en la clase base.(abstracta quizá?) 

    Para más información de las restricciones Restricciones de tipos de parámetros (Guía de programación de C#)


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 17 de junio de 2020 1:41
    Moderador
  • Bueno mi objetivo era tener ese método dentro de un class que si tiene un tipo determinado, es más si te fijas las variables tipoSelec, pos. Son variables que no están declaradas en el método porque son variables que pertenecen al class que va a utilizar dicho método.

    Voy a mirar a ver si combinando lo que me has indicado puedo realizarlo, pero el objetivo era reducir código que se me estaba repitiendo con 40 objetos en un método determinado. de hay de crear un método tipado para configurar esas variables.

    lunes, 29 de junio de 2020 23:24