Övning – Utföra tillägg med implicit datakonvertering

Slutförd

Ofta vill du utföra matematiska åtgärder på numeriska data. Du börjar med addition i den här lektionen och expanderar till andra åtgärder i nästa enhet eftersom det finns en viktig lektion att lära dig om hur C#-kompilatorn parsar och tolkar koden.

Addera två numeriska värden

Om du vill lägga till två tal tillsammans använder du additionsoperatorn, som är plussymbolen +. Det stämmer, samma plustecken + som du använder för sammanlänkning av strängar används även för addition. Att använda samma symbol till olika syften kallas ibland för ”överlagring av operatorn”, och det här förekommer ofta i C#.

I det här fallet förstår C#-kompilatorn vad du försöker göra. Kompilatorn parsar koden och ser att operatorn + är omgiven av två numeriska tal (operander). Baserat på variablernas datatyper (båda är int-värden) förstår kompilatorn att du avser att addera dessa värden.

  1. Ange följande kod i .NET-redigeraren:

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. Kör koden så visas följande resultat i utdatakonsolen:

    19
    

Blanda flera datatyper för att framtvinga implicita typkonverteringar

Vad händer om du försöker använda symbolen + med både string och int värden?

  1. Ändra koden du skrev så att den matchar följande kod:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. Kör koden så visas följande resultat i utdatakonsolen:

    Bob sold 7 widgets.
    

I det här fallet förstår C#-kompilatorn att du vill använda symbolen + för att sammanfoga de två operanderna. Anledningen är att symbolen + omges av operander av både typen string och int. Den försöker då implicit typkonvertera int-variabeln widgetsSold till en string-variabel så att resten av strängen kan sammanlänkas. C#-kompilatorn försöker hjälpa till när det går, men du bör helst vara så explicit som möjligt.

Prova ett mer komplicerat fall där du adderar tal och sammanfogar strängar

  1. Ändra koden du skrev så att den matchar följande kod:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. Kör koden så visas följande resultat i utdatakonsolen:

    Bob sold 77 widgets.
    

I stället för att lägga till int-variabeln widgetsSold till int-literalen 7 så behandlar kompilatorn allting som strängar och sammanlänkar dem.

Lägg till parenteser för att klargöra din avsikt i kompilatorn

  1. Ändra koden du skrev så att den matchar följande kod:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. Kör koden så visas följande resultat i utdatakonsolen:

    Bob sold 14 widgets.
    

Parentessymbolen () blir ytterligare en överlagrad operator. I det här fallet bildar den inledande och avslutande parentesen operatorn för åtgärdsordning, precis som i en matematisk formel. Du anger att du vill att de inre parenteserna ska matchas först, vilket resulterar i tillägg av int värden widgetsSold och värdet 7. När parentesen är uträknad typkonverteras resultatet implicit till en sträng så att den kan sammanlänkas med resten av meddelandet.

Kommentar

Du bör förmodligen undvika att utföra både en beräkning och en sammanlänkning på samma kodrad. Här är syftet att hjälpa dig att förstå operatorer och operander på samma sätt som kompilatorn.

Sammanfattning

Här är vad du har lärt dig hittills om matematiska operationer i C#:

  • Du kan utföra matematikliknande additionsåtgärder på tal.
  • Plustecknet + används för både sammanlänkning av strängar och addition. Det här kallas för överlagring av en operator. Kompilatorn härleder hur operatorn ska användas beroende på operandernas datatyper.
  • Om det går så kan C#-kompilatorn implicit konvertera en int till en string, om det är uppenbart att utvecklaren försöker sammanlänka strängrepresentationen av ett tal i presentationssyfte.
  • Använd parenteser för att definiera en åtgärdsordning för att uttryckligen tala om för kompilatorn att du vill utföra vissa åtgärder före andra åtgärder.