Sva lica ToString() metode

Oni koji često upotrebljavajuToString() metodu za formatiranje brojeva, datuma ili valuta, a zaboravljaju na koje sve načine mogu da upotrebljavaju metodu (kao npr. ja), dobro znaju koliko je ovakav podsetnik dobrodošao. Pogledaćemo i kako možete da implementirate sopstveni, kompleksni ToString() metod.

Formatiranje brojeva

Za formatiranje brojeva koristi se NumberFormatInfo klasa. Ovo su sve moguće vrednosti koje prosleđujete metodi:

  • C ili c - Format valute (c je od currency).
  • D ili d - Decimalni format. Zadajete broj cifara iza zareza.
  • E ili e - Eksponencijalna vrednost.
  • F ili f - Broj sa fiksnim zarezom (Fixed point - ne znam da li sam ovo dobro preveo).
  • G ili g - Generalni format. Formatiranje se vrši uvek u kraći string, a rezultat će zavisiti od tipa koji se konvertuje u string.
  • N ili n - Format broja sa fiksnim zarezom i separatorom za hiljade.
  • P ili p - Format za procenat.
  • R ili r - Tzv. Raoundtrip format koji se koristi da bi se broj koji se konvertuje u string uspešno vratio u originalan tip.
  • X ili x - Heksadecimalni format

Formatiranje datuma

Za formatiranje datuma korisiti se DateTimeFormatInfo klasa. Ovo su osnovni tipovi formata:

  • d - Format kratkog datuma (npr. dd/MM/yyyy)
  • D - Format dugačkog datuma (npr. Ponedeljak, 07. Jan 2008)
  • f - Kompletan datum i vreme (dugačak format datuma + kratak format vremena)
  • F - Kompletan datum i vreme (dugačak format datuma + dugačak format vremena)
  • g - Generalni format (kratak format datuma + kratak format vremena)
  • G - Generalni format (kratak format datuma + dugačak format vremena)
  • M ili m - Mesec/Dan format (npr. Jan, 07)
  • R ili r - Formatira preko RFC1123 specifikacije (npr. ddd, dd MMM yyyy HH':'mm':'ss 'GMT')
  • s - Sortirajući (sortable) format (npr. yyyy'-'MM'-'dd'T'HH':'mm':'ss) Ovaj format je sortirajući jer koristi "leading-zero", tj. umeće nulu ispred jednocifrenih vrednosti.
  • t - Format kratkog vremena (HH:mm)
  • T - Format dugačkog vremena (HH:mm:ss)
  • u - UniversalSortableDateTime format - Dodaje 'Z' na Sortirajući format (nisam siguran čemu bi ovo služilo)
  • U - Kompletan datum i vreme (dugačak format datuma + dugačak format vremena) koristeći UniversalSortableDateTime format - ni ovo ne znam čemu služi
  • Y ili y - Year/Month format (npr. 2008, Jan)

Ali to nije sve. Osnovni tipovi datumskih formata mogu da se kombinuju, pa tako možete da dobijete sledeće rezultate:

  • d, %d - Dan u mesecu (%d ne može da se kombinuje sa drugim formatima, za "d" se ne koristi "leading zero")
  • dd - Takođe dan u mesecu, ali ovaj može da se kombinuje sa drugim formatima
  • ddd - Skraćenica za dan u nedelji, npr. Pon, Uto...
  • dddd - Puno ime dana u nedelji
  • M, %M broj meseca (pravila važe kao za d, %d)
  • MM - broj meseca u godini sa "leading zero"
  • MMM - skraćenica za mesec, npr. Jan
  • MMMM - Puno ime meseca u godini
  • y, %y (godina sa dve cifre, npr. '08 - pravila važe kao i za d, %d)
  • yy - isto kao i prethodni format
  • yyyy - normalan broj godine
  • h, %h - Format za čas prema 12-časovnom satu (pravila važe kao za d, %d)
  • H, %H - Format za čas prema 24-časovnom satu (pravila važe kao za d, %d)
  • hh - Format za čas prema 12-časovnom satu sa "leading zero"
  • HH - Format za čas prema 24-časovnom satu sa "leading zero"
  • m, %m - Format za minute (pretpostavljate, pravila važe kao za d, %d)
  • mm - Format za minute sa "leading zero"

Postoji još formata za DateTime, ali nisu često u upotrebi.

Napomena: Nullable<T> tip ima samo ToString() metod, a ukoliko želite T da konvertujete u string, morate prvo da kastujete u željeni tip:

    dateOfBirth.ToString(); // nullable

    ((DateTime)dateOfBirth).ToShortDateString(); // datetime

Implementirajte sopstevni .ToString() metod u svojim klasama

Za kraj bih dao i podsetnik za implementaciju "custom" ToString() metoda. Ukoliko vam je potrebno da vaš objekat ima ToString() metod sve što treba da uradite je da overrideujete ovaj metod base klase:

Recimo da imate klasu Customer koja, između ostalih, ima FirstName, LastName i DateOfBirth atribute. ToString() metoda bi izgledala recimo ovako:

    public override string ToString()

    {

        return this.firstName + " " + this.LastName;

    }

Možete i da prametrizujete ToString() metod tako da prikazuje različite informacije u zavisnosti od "formata" - kao što je to slučaj sa brojevima i datumima iz gornjih lista. Možete, recimo, da napravite metodu koja vam vraća puno ime ako joj se prosledi N, ili recimo datum rođenja ako se prosledi D, itd.. Potrebno je samo da overloadujete .ToString() metodu. Na primer:

    public string ToString(string format)

    {

        string result = "";

        if (format == "N")

            result = this.firstName + " " + this.LastName;

        else if (format == "D")

            result = this.dateOfBirth.ToLongDateString();

        return result;

    }

Published Sunday, January 06, 2008 10:10 PM by janko
Filed under:
Powered by Community Server (Commercial Edition), by Telligent Systems