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.
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?
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?
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 ;-)
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
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.
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
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?
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...
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..!?
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
Synes godt om
Ny brugerNybegynder
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.