Permalänk

C# Kort kod, behöver hjälp

Skoluppgift:

Skriv en metod som har:
enbart access från den egna klasssen
ett heltal som inparameter
en textsträng som returvärde.
returnera en valfri text som du slagit ihop med inparametern

Jag är nybörjare och har klurat ett tag nu. Jag får inga error messages men när jag kör programmet skrivs ingenting ut.

Extremt tacksam för svar, gärna en förklaring istället för ett "facit"
Tacksam för svar

Permalänk
Medlem
Skrivet av highclick:

Skoluppgift:

Skriv en metod som har:
enbart access från den egna klasssen
ett heltal som inparameter
en textsträng som returvärde.
returnera en valfri text som du slagit ihop med inparametern

http://i.imgur.com/KdgNSnx.png

Jag är nybörjare och har klurat ett tag nu. Jag får inga error messages men när jag kör programmet skrivs ingenting ut.

Extremt tacksam för svar, gärna en förklaring istället för ett "facit"
Tacksam för svar

Till att börja med så ska Public Static string uppgift6 på rad 20 ändras till Private string uppgift6. Som det är nu kan alla klasser och program komma åt metoden. Private gör så att bara den egna klassen kommer åt. Och sedan ska det stå Console.WriteLine(uppgift6(3)); på rad 12. Nu returneras bara textsträngen. Men ingenting skrivs ut.

Permalänk
Skrivet av Krass:

Till att börja med så ska Public Static string uppgift6 på rad 20 ändras till Private string uppgift6. Som det är nu kan alla klasser och program komma åt metoden. Private gör så att bara den egna klassen kommer åt. Och sedan ska det stå Console.WriteLine(uppgift6(3)); på rad 12. Nu returneras bara textsträngen. Men ingenting skrivs ut.

Tack så hemskt mycket för svaret!

Du har definitivt gjort min dag!

Permalänk
Medlem

Och använd String.Format("text {0} text", tal) istället för att konvertera och sen addera strängar.

Permalänk
Medlem

Jag tycker att man antingen gör som han gjort, eller använder stringbuilder. Att köra string.format är både "svårt" att läsa, och svårt att underhålla (Tänk om du vill lägga till/ta bort en grej).

När man gör det så kort som han har gjort tycker jag det funkar utmärkt, men ska man dra igenom någon loop och göra något mer avancerat, t.ex. concaternera några hundra stränger, ja, då funkar stringbuilder bra (och är läsbarare).

Det måste ju upp till bra många tusen repetitioner innan man ser någon som helst prestandaskillnad, spara in på gungorna istället för karusellen

Permalänk
Avstängd
Skrivet av Ernesto:

Jag tycker att man antingen gör som han gjort, eller använder stringbuilder. Att köra string.format är både "svårt" att läsa, och svårt att underhålla (Tänk om du vill lägga till/ta bort en grej).

När man gör det så kort som han har gjort tycker jag det funkar utmärkt, men ska man dra igenom någon loop och göra något mer avancerat, t.ex. concaternera några hundra stränger, ja, då funkar stringbuilder bra (och är läsbarare).

Det måste ju upp till bra många tusen repetitioner innan man ser någon som helst prestandaskillnad, spara in på gungorna istället för karusellen

Man kan använda sig av "Replace" men "stringbuilder" är mycket snabbare.

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av Ernesto:

Jag tycker att man antingen gör som han gjort, eller använder stringbuilder. Att köra string.format är både "svårt" att läsa, och svårt att underhålla (Tänk om du vill lägga till/ta bort en grej).

När man gör det så kort som han har gjort tycker jag det funkar utmärkt, men ska man dra igenom någon loop och göra något mer avancerat, t.ex. concaternera några hundra stränger, ja, då funkar stringbuilder bra (och är läsbarare).

Det måste ju upp till bra många tusen repetitioner innan man ser någon som helst prestandaskillnad, spara in på gungorna istället för karusellen

Struntprat.

string.format("Nu skall vi jämföra värde {0} med värde {1} som borde bli värde {2}, x,y,z)
Standard att man skriver på detta sätt på alla arbetsplatser jag varit på och jag gillar det själv också för att det är klart och tydligt och går snabbt.

Skrivet av zxhosting:

Man kan använda sig av "Replace" men "stringbuilder" är mycket snabbare.

Källa på det?

Senast jag testade stringbuilder krävs det en hel del manipulation av strängar för att det skall vara värt det av prestandaskäl. Är det inte en större mängd sting-operationer / manipulering som skall göras så är det snabbare att undvika stringbuilder och manipulera dem själv.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem

return "Ditt tal är " + siffra hade dugit bra, + i fallet där en parameter är en string är samma sak som String.concat() metoden som kommer läsa den andra parametern som object och köra .ToString() på den. Angående att använda String.Format och StringBuilder är det en smaksak, prestandamässigt spelar det ingen roll förrän det handlar om enorma mängder data. (Och kompilatorn optimerar bort den klassiska problematiken med att + kombination av strängar skulle skapa massor av strängar i minnet).

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Avstängd
Skrivet av IceDread:

Källa på det?

Senast jag testade stringbuilder krävs det en hel del manipulation av strängar för att det skall vara värt det av prestandaskäl. Är det inte en större mängd sting-operationer / manipulering som skall göras så är det snabbare att undvika stringbuilder och manipulera dem själv.

Just det, det är när man gör över 2000 då är stringbuilder snabbare. källa http://www.dotnetperls.com/replace

Citat:

Replace methods benchmark, 20 chars

Method A - String Replace: 5.60 seconds
Method B - StringBuilder Replace: 0.62 seconds [faster]

Replace methods benchmark, 1000 chars

Method A - String Replace: 21.80 seconds
Method B - StringBuilder Replace 4.89 seconds [faster]

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av zxhosting:

Just det, det är när man gör över 2000 då är stringbuilder snabbare. källa http://www.dotnetperls.com/replace

Lustigt svar, alltså har du fel enligt ditt eget bevis, strinbuilder är inte snabbare utan det beror som jag sa på situationen. Kan tillägga att det finns många prestandatester att tillgå men bäst är att göra dem själv så de blir anpassade efter den specifika situationen som skall lösas.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem
Skrivet av IceDread:

string.format("Nu skall vi jämföra värde {0} med värde {1} som borde bli värde {2}, x,y,z)
Standard att man skriver på detta sätt på alla arbetsplatser jag varit på och jag gillar det själv också för att det är klart och tydligt och går snabbt.

Detta är ju dock läsbarare, eftersom det är så man läser.

Salesman + " har sålt " + Produkt + " till kunden " + CustomerName

I ditt exempel, som är mycket vanligt, så vet man ju inte vad {0} är för någonting utan att flytta blicken hela vägen till slutet på raden, räkna antalet kommatecken och sen flytta tillbaka blicken. Det är inte lika irriterande om man bara har 3 parametrar, men om man har 8, eller 11 etc blir det riktigt jobbigt. Särskilt om man har lagt till en ny variablel någon gång och inte orkat uppdatera alla siffrorna, så att det helt plötsligt står en 9:a i mitten:

string.format("Nu skall vi jämföra värde {0} med värde {1} som borde bli värde {2} för att se om {3} lyser i {4} till och med {9} för {5} som inte har lika många {6} beroende {7} {8} ", x,y,z, solen, vaderstreck, datum, tidspann, vad, oj, da)

Skriv en liten kodsnutt som beskriver vilka operationer dina ögon behöver utföra för att tolka string.Format jämfört med + concat så är svaret ganska tydligt. Bara för att man har gjort på ett visst sätt väldigt länge betyder ju inte att det är bäst.

Permalänk
Medlem
Skrivet av Ernesto:

Detta är ju dock läsbarare, eftersom det är så man läser.

Salesman + " har sålt " + Produkt + " till kunden " + CustomerName

I ditt exempel, som är mycket vanligt, så vet man ju inte vad {0} är för någonting utan att flytta blicken hela vägen till slutet på raden, räkna antalet kommatecken och sen flytta tillbaka blicken. Det är inte lika irriterande om man bara har 3 parametrar, men om man har 8, eller 11 etc blir det riktigt jobbigt. Särskilt om man har lagt till en ny variablel någon gång och inte orkat uppdatera alla siffrorna, så att det helt plötsligt står en 9:a i mitten:

string.format("Nu skall vi jämföra värde {0} med värde {1} som borde bli värde {2} för att se om {3} lyser i {4} till och med {9} för {5} som inte har lika många {6} beroende {7} {8} ", x,y,z, solen, vaderstreck, datum, tidspann, vad, oj, da)

Skriv en liten kodsnutt som beskriver vilka operationer dina ögon behöver utföra för att tolka string.Format jämfört med + concat så är svaret ganska tydligt. Bara för att man har gjort på ett visst sätt väldigt länge betyder ju inte att det är bäst.

Det är subjektivt, inget egentligen rätt eller fel. En gång i tiden tyckte jag inte string.format tillförde något men beroende på vad man skall visa upp och hur ändrade jag mig.

Om du tycker raden blir för lång så skriv värdena på ny rad.. också personligt.

Låt säga att dina värden är lite mer komplexa eller att dina objekt har lite längre namn som bättre breskriver objektet, då är det mer lättläst med string.format

Låt säga att vi behöver ändra din rad men lite mer information så blir den jobbig att läsa.

Salesman + " har sålt " + Produkt + " till kunden " + CustomerName

till

Salesman.title +" " +Salesman.firstname +" " + salesman.sirname + " har sålt " + Products.Items != null ? Produkt.Items.Count : "0" + " st till kunden " + CustomerName

string.format({0} har sålt " + {1} st till kunden " + {2}, Salesman.title + " "+Salesman.firstname +" " + salesman.sirname Products.Items != null ? Produkt.Items.Count : "0", CustomerName)

Edit, sen hade vi denna kod.

string.format("Nu skall vi jämföra värde {0} med värde {1} som borde bli värde {2} för att se om {3} lyser i {4} till och med {9} för {5} som inte har lika många {6} beroende {7} {8} ", x,y,z, solen, vaderstreck, datum, tidspann, vad, oj, da)

Vill du skriva på det sättet är det upp till dig...
Själv skulle jag gjort så här

string.format("Nu skall vi jämföra värde {0} med värde {1} som borde bli värde {2} för att " + " se om {3} lyser i {4} till och med {9} för {5} som inte har lika många {6} beroende {7} {8} ", x,y,z, solen, vaderstreck, datum, tidspann, vad, oj, da)

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem

Nu skrev du ju en concat i din string.format

Man läser från vänster till höger (eller från höger till vänster), man hoppar inte fram och tillbaka.

Faktiskt är det ju så att objektivt är string.format svårare att tolka per definition - Sen att man lärt sig att tolka den är en annan sak.

Konsekvens, både i kod och i text är nyckeln till mycket. Om man kan läsa koden som man läser en skönlitterär bok, kommer koden vara lättast att tolka och snabbast att läsa för människan.

Ibland måste man bryta mot de reglerna p.g.a performance, t.ex om man ska iterera mycket, då måste man ju köra stringbuilder eller string.format - Men om performance inte spelar roll så bör ju läsbarhet vara ledordet - Man läser ju 90% av tiden och skriver 10%, om ens det.

Permalänk
Medlem

c# 6.0
https://cubhanddatorsystem.sharepoint.com/rod/Delade%20dokume...

Citat:

String Interpolation
Prior to C# 6.0, you could concatenate two or more strings together in
one of the following ways:

string firstName = "Michael";
string lastName = "Crump";
WriteLine("Name : " + firstName + " " + lastName);
WriteLine(string.Format("Name : {0} {1}", firstName, lastName));

In C# 6.0, there is a cleaner format, as shown in the first WriteLine call.
Also, you can place expressions directly in the string literal to evaluate
an expression:

string firstName = "Michael";
string lastName = "Crump";
int orderNumber = 250000;

WriteLine("Name : \{firstName} \{lastName}");

WriteLine("Name : \{firstName} \{lastName}\nDiscount :\{orderNumber == 250000 ? " You
get 25% off your order!" : ""}");

In this sample, the console returns the following information, as it
evaluates the orderNumber is equal to 250,000; otherwise won’t
print anything

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!