Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Compararea unei variabile generice

Compararea cu null

Ajungem in situatia cand, de exemplu, in interiorul unei metode generice trebuie sa comparam o variabila de tip generic cu null sau cu alte variabile de tip generic.

        public static void GenericMethod<T>(T obj)
        {
            if(obj == null)
            {
                //cod doar pentru tipurile referinta
            }
        }

Pentru ca nu exista nici o constrangere asupra tipului generic, codul din interioul if-ului se va executa doar pentru tipurile referinta, pentru tipurile valoare nefiind posibil, chiar daca nu va fi generata nici o eroare la compilare in acest caz. Totusi, in cazul in care am adauga o constrangere la tipurile valoare, compilatorul isi va da seama ca respectiva conditie din if nu va fi executata niciodata.

        public static void GenericMethod<T>(T obj) where T:struct 
        {
            //expression is always false
            if(obj == null)
            {
                //
            }
        }

Compararea cu alte variabile de tip generic

Compararea a doua variabile de tipul generic T nu este posibila decat daca exista o constrangere la tipul referinta.

Codul se va compila iar comparatia va returna true daca obiectele indica aceeasi referinta (articolul Egalitate in C#).

        static void GenericMethod<T>(T obj1, T obj2) where T:class 
        {
           //fara eroare la compilare
           if(obj1 == obj2)
           {
               
           }
        }

Pentru constrangerea la tipul valoare, compilatorul va emite o eroare la compilare. Spre deosebire de tipul valorilor primitive, int, byte cand compilatorul stie sa compare, pentru celelalte tipuri valoare compilatorul va emite eroare: Operator ‘==’ cannot be applied to operands of type ‘T’ and ‘T’.

        static void GenericMethod<T>(T obj1, T obj2)
        {
           //eroare la compilare
           if(obj1 == obj2)
           {
               
           }
        }

Pentru tipul valoare operatorul == trebuie suprascris.

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*