Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Atributi parametara - provera imena property-ja

[es] :: .NET :: Atributi parametara - provera imena property-ja

[ Pregleda: 1240 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
212.200.231.*



+8 Profil

icon Atributi parametara - provera imena property-ja29.07.2010. u 10:31 - pre 167 meseci
Pravim neku metodu koja prima nekoliko stringova čije vrednosti bi trebalo da budu imena property-ja klase. Da li postoji neki atribut koji proverava da li su ta imena validna, tj. da li property-ji sa takvim imenom postoje?

Npr:
Code:

public class Osoba
{
    public string Ime { get; set; }
    public string Prezime { get; set; }
}

public class NekaKlasa
{
    private static void NekaMetoda(Osoba obj, string propertyName)
    {
        if (obj.GetType().GetProperty(propertyName).GetValue(obj, null) != null)
        {
            //do something
            //...
        }
    }
}


I sad ako pozovem NekaKlasa.NekaMetoda(obj, "Ime") to bi trebalo da prođe, a ako pozovem NekaKlasa.NekaMetoda(obj, "NepostojeciProperty") da dobijem compile time error.
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.zaslon-telecom.si.



+14 Profil

icon Re: Atributi parametara - provera imena property-ja29.07.2010. u 13:18 - pre 167 meseci
Postoje neki atributi koji rade u compile time-u (npr. Obsolete, UsageAttribute, Extension, itd.), ali su svi unapred definisani u kompajleru. Atributi koje ti kao developer pises se kompajliraju u assembly i koriste iskljucivo u run time-u. Uostalom nisam siguran ni kako bi taj sistem radio, sta je sa calculated stringovima, npr. NekaKlasa.NekaMetoda(obj, "Ime" + con.ReadLine())?

Ukratko, compile time gresku neces nikada dobiti na taj nacin, nema tih atributa koji to rade.
Umesto toga koristi named string constants sto ce drasticno olaksati posao i smanjiti mogucnost runtime greske, npr.

Code:

public class Osoba
{
   public const string ImeProperty = "Ime";
   public const string PrezimeProperty = "Ime";
}

...

NekaKlasa.NekaMetoda(obj, Osoba.Ime);

if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
212.200.231.*



+8 Profil

icon Re: Atributi parametara - provera imena property-ja30.07.2010. u 13:06 - pre 167 meseci
Hvala na odgovoru.

Primetio sam da je takvo (ili slično) ponašanje u nekim slučajevima implementirano. Recimo string.Format() me odmah upozorava ako se broj argumenata i parametara ne poklapa ili XML doc mi prijavljuje grešku ako nisam napisao dokumentaciju za sve parametre metode itd. Pa sam se nadao da je to urađeno uz pomoć atributa i da nešto slično već postoji za proveru imena svojstava.
 
Odgovor na temu

[es] :: .NET :: Atributi parametara - provera imena property-ja

[ Pregleda: 1240 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.