Visualizzazione dei risultati da 1 a 10 su 21

Visualizzazione discussione

  1. #1
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308

    [C#] Metodi generici <T>

    Un saluto a tutti, ogni tanto ho bisogno di voi.
    Cercherò di essere il più chiaro e sintetico possibile, e per far questo non posterò il codice "vero" ma una sua schematizzazione.
    Io ho tre array chiamati con lo stesso nome 'faces' che rappresentano le 6 facce di un solido. Gli array sono tre perchè i tipi di elementi che contengono possono essere 3: il primo tipo (struttura) è FaceT e costruisce facce "piatte" ricoperte da una texture, il secondo è FaceH e costruisce facce "accidentate" modellate da una HeightMap ed il terzo FaceHT fa le due cose insieme.
    Per stabilire se un osservatore sta "sorvolando" una delle facce di un solido e se si quale numero di faccia serve un metodo Close() che accetta in argomento l'array faces e restituisce il numero di faccia sorvolata

    Close(faces)

    Questo metodo a sua volta ne richiama un altro che richiede pure lui l'array faces:

    Close(faces) --> IsP(faces)

    IsP verifica se la "proiezione" dell'osservatore sul piano (infinito) della faccia è interna al perimetro del rettangolo che delimita la faccia.
    Ora, devo dichiarare il tipo di array quando dichiaro Close e IsP:

    public int Close(FaceT faces) --> public bool IsP(FaceT faces)

    Ma io ho tre tipi di "facce" e dunque mi servono 6 metodi (tre coppie)

    public int CloseT(FaceT faces) --> public bool IsPT(FaceT faces)
    public int CloseH(FaceH faces) --> public bool IsPH(FaceH faces)
    public int CloseHT(FaceHT faces) --> public bool IsPHT(FaceHT faces)

    Per carità, funzionare funziona, ma per principio (e per correttezza di programmazione) ho cercato di utilizzare solo 2 metodi, in questo modo:

    public int Close<T>(T faces) --> public bool IsP<T>(T faces)

    E ci sono pure quasi riuscito, tranne per una cosa: questo errore

    Errore 1 Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'T'

    L'errore nasce dal fatto che 'faces' è un array e all'interno del secondo metodo si cerca di leggerne gli
    elementi faces[i].

    codice:
            public bool IsOn<T>(int i, T faces, Vector3 L, float closed)
            {
                bool res = false;
                Vector3 NP = My.Discovery.Position - L - faces[i].nodes[0];
                Vector3 v1 = Vector3.Normalize(faces[i].V1);
                Vector3 v2 = Vector3.Normalize(faces[i].V2);
                if ((Vector3.Dot(NP, faces[i].Normal) > My.Q2) & (Vector3.Dot(NP, faces[i].Normal) < closed))
                    if ((Vector3.Dot(NP, v1) > 0) & (Vector3.Dot(NP, v1) < faces[i].V1.Length()))
                        if ((Vector3.Dot(NP, v2) > 0) & (Vector3.Dot(NP, v2) < faces[i].V2.Length()))
                            res = true;
                return res;
            }
    Come posso risolvere?
    Ciao e grazie.
    Ultima modifica di escocat; 09-01-2014 a 17:43

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.