1 Winstrand Development
Konvertering mellan strängar och datatyper När vi arbetar med de inbyggda datatyperna (int, double etc.) går det lätt att konvertera värdet till en sträng mha metoden.tostring() double value = 0.15; //Gives the same result string valuestring = "value: " + value.tostring(); valuestring = "value: " + value; //.ToString() is implicitly called Winstrand Development 2013-01-23 2
Konvertering från sträng Om vi skriver in ett tal i en sträng är inte detta ett värde av till exempel datatyperna int eller double. Tal i en sträng hanteras som vilka tecken som helst. Därför går det inte att direkt konvertera strängar till en annan typ. string valuestring = "10"; //This will cause a compile time error! int value = valuestring; Winstrand Development 2013-01-23 3
Konvertering från sträng Vi behöver alltså ett tillvägagångssätt för att konvertera värden inbäddade i strängar. I C# finns det ett flertal sätt att utföra konverteringen från strängar till andra datatyper. Klassen Convert Parse()-metoderna som finns tillgängliga i alla inbyggda datatyper (int, double ) TryParse()-metoderna (avancerat). Samma tillgänglighet som Parse(). Är säkrare att använda, men kräver mer kod för att kunna användas. Winstrand Development 2013-01-23 4
Klassen Convert Denna klass innehåller ett stort antal metoder för att konvertera olika datatyper och klasser. Alla metoder i denna klass är statiska därför anropas de direkt på klassen Convert. Till exempel Convert.ToDouble() Man skickar med strängen som ska konverteras och får som returvärde tillbaka ett värde av vald typ Winstrand Development 2013-01-23 5
Klassen Convert Vanligaste metoderna Metod Till typ Exempel ToDecimal() decimal string text = "15,5"; decimal value =Convert.ToDecimal(text); ToDouble() double string text = "15,5"; double value = Convert.ToDouble(text); ToInt32() int string text = "10"; int value = Convert.ToInt32(text); Winstrand Development 2013-01-23 6
Metoden Parse() I alla inbyggda datatyper finns en statisk metod som heter Parse(). Parse() fungerar på liknande sätt som metoderna i Convert-klassen då man skickar med den sträng som ska konverteras och får tillbaka den valda datatypen. Winstrand Development 2013-01-23 7
Metoden Parse() Några exempel string text1 = "15,5"; string text2 = "10"; decimal valuedec = decimal.parse(text1); double valuedbl = double.parse(text1); int valueint = int.parse(text2); Winstrand Development 2013-01-23 8
Metoden TryParse() (avancerad) Precis som metoden Parse() finns TryParse() som statisk metod i våra datatyper. Den skiljer sig åt från Parse() då en tar två parametrar samt returnerar ett bool-värde. Första parametern är strängen som ska konverteras, den andra är variabeln som kommer innehåller det konverterade värdet (om konverteringen lyckades) Winstrand Development 2013-01-23 9
Metoden TryParse() (avancerad) bool result = int.tryparse(text2, out valueint); Returvärdet är alltså true om konverteringen lyckades, eller false om den misslyckades. Lyckades konverteringen har variablen (valueint i exemplet ovan) tilldelats värdet från strängen. Lägg märke till att det står out framför valueint. Detta visar att variabelns värde kan komma att ändras efter att vi kört metoden. Winstrand Development 2013-01-23 10
Typkonvertering 11 Winstrand Development
Typkonvertering Typkonvertering Det är inte bara mellan strängar vi vill kunna konvertera data, utan även andra datatyper ska kunna konverteras mellan varandra. Ofta vill vi kunna konvertera int till float, short till long, decimal till double etc. Winstrand Development 2013-01-23 12
Typkonvertering Typkonvertering Att konvertera från en datatyp som rymmer mindre mängd data kan ofta göras implicit. Alltså konvertering från short till int funkar alltid, precis som från float till double. int smallvalue = 10; long bigvalue = smallvalue; //Upcast works float smallvalue = 15.5f; double bigvalue = smallvalue; Winstrand Development 2013-01-23 13
Typkonvertering Typkonvertering Större värdetyper (dvs. de som innehåller mer data) måste alltid definiera konverteringen till mindre, annars genereras kompileringsfel. Konverterar vi alltså från decimal till float, eller long till int, måste detta alltså skrivas i koden. När vi konverterar från större värdetyper måste vi tänka på att vi kan få dataförluster då viss information utelämnas vid konverteringen Winstrand Development 2013-01-23 14
Typkonvertering Typkonvertering Syntaxen för att konvertera inbyggda datatyper är: datatype smallvalue = (datatype)bigvalue; Man skriver alltså den önskade datatypen inom parentes framför variabeln som ska konverteras // Talet ryms i smallvalue men måste ändå konverteras long bigvalue = 999999; // = 999999 int smallvalue = (int)bigvalue; // = 999999 // värdet är 1051.5236593059936908517350158M decimal precise = (decimal)bigvalue / 951M; // trunkerat till 1051.52368 float other = (float)precise; Winstrand Development 2013-01-23 15