Avatar billede dj_uncas Nybegynder
13. marts 2006 - 09:56 Der er 20 kommentarer og
1 løsning

Convert.ToBoolean(bool value)

Hej

Er der nogen der har et godt bud på hvorfor ToBoolean metoden tager en boolean som parameter??

Jeg har undret mig over det et stykke tid, men har ikke rigtig fundet en god forklaring...

Her står der at den bare returnerer den samme værdi uden at gøre noget ved den.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemconvertclasstobooleantopic1.asp
Avatar billede dr_chaos Nybegynder
13. marts 2006 - 10:00 #1
Convert.ToBoolean(bool value)
kan også tage andre værdier f.eks. en string eller int.
Convert.ToBoolean(bool value) med bool value er bare et overload.
Avatar billede dj_uncas Nybegynder
13. marts 2006 - 10:52 #2
Ja, det er jeg godt klar over, jeg tænkte bare på hvorfor de har lavet det overload? En tanke jeg har haft er at det evt. kan være i tilfælde af at man i sit system ikke ved hvilken datatype man skal konvertere, og den derfor skal kunne tage alle slags?
Avatar billede dr_chaos Nybegynder
13. marts 2006 - 11:01 #3
Det kunne jeg forestille mig.
Det samme er tilfældet for alle convert.to functioner.
Avatar billede dj_uncas Nybegynder
13. marts 2006 - 13:33 #4
Ja, de tager alle deres egen type som parameter.. Nå, det er vel fordi det bygger på et eller andet fælles bibliotek somehow..
Avatar billede dr_chaos Nybegynder
13. marts 2006 - 13:34 #5
ja
Avatar billede sovsekoder Nybegynder
13. marts 2006 - 13:40 #6
Meget sjovt tilfælde - det virker ikke på mig som om der er en super god grund. - Reflector viser også bare at den er implementeret som msdn'en siger:

public static bool ToBoolean(bool value)
{
  return value;
}

>En tanke jeg har haft er at det evt. kan være i tilfælde af at man i sit system ikke ved hvilken datatype man skal konvertere, og den derfor skal kunne tage alle slags?

hvornår ved man "ikke hvad datatype det er"?
Avatar billede sovsekoder Nybegynder
13. marts 2006 - 13:41 #7
...det kunne have været en go' grund hvis der var et interface der tvang Convert til at implementere metoden, men det er der ikke såvidt jeg ved ?!
Avatar billede dj_uncas Nybegynder
13. marts 2006 - 21:33 #8
Nu var det min tur til at kigge med Reflector, og det ser ikke ud til at Convert implementerer noget interface, men bare nedarver fra object...

Jeg så også lige hurtigt at alle datatyper har samme "skæve" metode, eks. ToChar( char value ) der også bare returnerer value.


Man ved ikke hvilken datatype man har med at gære hvis man eks. har en metode der tager et object som parameter, og det object enten kan være en string eller en int, der begge kan konverteres til boolean ("True"/"False", 0/1). Det er noget man selvfølgelig helst skal undgå, men det kan godt forekomme.

Nå, jeg tror ikke vi kommer videre her. I kan begge smide et svar som tak for forsøget ;-)
Avatar billede dj_uncas Nybegynder
13. marts 2006 - 21:34 #9
Jeg spurgte også lige en kollega, men han havde heller ikke nogen gode forklaringer..
Avatar billede arne_v Ekspert
15. marts 2006 - 04:57 #10
det her er et rigtigt godt spørgsmaal !

så vidt jeg kan læse mig frem til hænger det sådan sammen at de simple
data typer har et såkaldt explicit interface IConvertible som har alle ToXxxx metoderne
og at det er disse metoder som er exposed for convenience via Convert klassen
Avatar billede dj_uncas Nybegynder
15. marts 2006 - 10:06 #11
ok! Så er der en eller anden form for mening med galskaben..

Arne, det bliver nok dig der skal smide et svar ;-)
Avatar billede arne_v Ekspert
15. marts 2006 - 13:25 #12
jeg tror at der er mening med det

men prøv selv at læs docs for IConvertible

et par gange - den er ikke specielt krystalklar
Avatar billede dj_uncas Nybegynder
15. marts 2006 - 14:36 #13
Ja ok, det er lidt mere forståeligt når det bare er en interface implementation..

Smid et svar.
Avatar billede arne_v Ekspert
15. marts 2006 - 14:46 #14
det er ikke en normal interface implementation

det er et eksplicit interface som er wrappet i en anden klasse

mystisk konstruktion

men teksten antyder at der er noget performance relateret i det

og svar
Avatar billede dj_uncas Nybegynder
15. marts 2006 - 15:31 #15
Nå ja, de har vel vendt og drejet det nogle gange, og har sikrt fundet frem til noget fornuftigt.. I og med det er en ret betydelig del af .NET det handler om har de nok også lige vendt en ekstra gang.
Avatar billede sovsekoder Nybegynder
17. marts 2006 - 11:01 #16
dj_uncas 21:33
>Man ved ikke hvilken datatype man har med at gære hvis man eks. har en metode der tager et object som parameter...
så er datatypen et object :o - så det ved man godt... forstår godt hvad du prøver at sige, min pointe er bare at så er det Convert.ToBoolean(object xxx) der kaldes
Avatar billede sovsekoder Nybegynder
17. marts 2006 - 11:05 #17
arne_v, 04:57:
det forklarer vel ikke hvorfor Convert klassen implementerer metoden ToBoolean(bool b), principielt set kunne man jo lige så godt lade være med at implementere den metoden? har jeg misforstået noget?
Avatar billede dj_uncas Nybegynder
17. marts 2006 - 11:15 #18
Hvad så hvis du bruger Generics, så kan du vel kalde "vores" metode med Convert.ToBoolean( T ), hvor T jo er en type der kan ændre sig...
Avatar billede sovsekoder Nybegynder
17. marts 2006 - 11:27 #19
jeg koder desværre ikke i .NET2.0 til dagligt ;-), men jeg går ud fra at T altid vil være en reference-type så det er ToBoolean(object) der vil blive kaldt...
Avatar billede sovsekoder Nybegynder
17. marts 2006 - 11:42 #20
hvis man i reflector kigger på de tilsyneladende meningsløse metoder:
ToBoolean(bool), ToByte(byte), ToChar(char) sosvosvosv..
højreklikker og trykker analyze. Derefter vælger "Used by". Så kan man se at metoderne ikke bliver brugt (overhovedet) internt i frameworket.

Så måske er det bare ren kosmetik at de findes..!?
Avatar billede arne_v Ekspert
18. marts 2006 - 02:47 #21
har du læst docs af IConvertible ?

som jeg læser der står der:
- alle simple typer implementer det eksplicitte interface IConvertible
- derfor skal alle simple data typer (inkl. bool) have en ToBoolean
- da eksplicitte interfaces er besværlige at bruge direkte og derfor er der
  lavet en convenience klasse Convert
- da Convert skal 100% dække IConvertible skal den have en ToBoolean for
  alle typer inkl. bool
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester