Jo nu är jag här igen... string formatTelefon = ""; Tack Patrik. du går utanför strängens längd i denna: string teleFon=textBoxTelefon.Text.Substring(lngPos+1,teleFonLangd); Jag är inte säker på att jag förstår dig... nä, jag kollade på fel. variabel sorry... Jamenvisst. Om ingenting skall hända då skall du ju bara returnera det du får in... alltså Tusen tack, men jag fick ett error:Case i C#
Jag försöker mig på att konvertera en funktion som jag gjort i VB till C#.
Jag får dock en del problem när jag skall ge mig på en case-sats.(det är kanske inte där felet ligger?)
<code>
if(textBoxTelefon.Text.Length>0)
{
int helaTelefon=textBoxTelefon.Text.Length;
int lngPos = textBoxTelefon.Text.IndexOf("-");
int riktNr = lngPos;
int teleFon = helaTelefon - (riktNr +1);
string formatTelefon;
switch (teleFon)
{
case 5:
formatTelefon =textBoxTelefon.Text.Substring(1,3).ToString();
break;
case 6:
break;
case 7:
break;
case 8:
break;
}
string totalTelefon=riktNr.ToString() + "-" + formatTelefon;
MessageBox.Show (totalTelefon.ToString());
</code>
Som det nu är, så har jag bara aktiverat den första case (5) men jag får följande fel:
<code>
E:\C#\SAW\SAW\frmKunder.cs(1244): Use of unassigned local variable 'formatTelefon'
</code>
Jag förstår inte vad som menas, gör ni??Sv: Case i C#
det är parsen innan kompileringen som inte antar att ngn av dina case händer, alltså skulle din variabel i teoring kunna vara oinstancierad när du sedan använder den längre ner.
Det här gäller all block scope inte bara för SWITCHSv: Case i C#
Tyvärr så verkar det som om jag har mera problem. Jag har skrivit om lite:
<code>
string formatTelefon;
int helaTelefon=textBoxTelefon.Text.Length;
int lngPos = textBoxTelefon.Text.IndexOf("-"); //vias antal tecken
string riktNr = textBoxTelefon.Text.Substring(0,lngPos); //visar riktnummer OK
int teleFonLangd=helaTelefon-lngPos-1;
string teleFon=textBoxTelefon.Text.Substring(lngPos+1,teleFonLangd);
formatTelefon = teleFon.Substring(0,2) + " " + teleFon.Substring(3,teleFonLangd);
MessageBox.Show(riktNr + "-" + formatTelefon.ToString());
</code>
Så kastar han ett undantag.
Det är vid raden teleFon.
<ode>
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
Additional information: Index and length must refer to a location within the string.
</code>
Ibland så undrar jag om det är värt besväret att försöka att lära sig ett nytt språk??Sv: Case i C#
(teleFonLangd är ju total antalet bokstäver i textBoxTelefon.Text...) alltså om textBoxTelefon.Text är 1234567 (är ju teleFonLangd=7) du säger: "börja på lngPos+1 och gå 7 tecken framåt".... inte så bra... lösning:
string teleFon=textBoxTelefon.Text.Substring(lngPos+1); //börjar på lngPos+1 och går till slutet...Sv: Case i C#
string formatTelefon = "";//här ser jag till att variablen är tom
int helaTelefon=textBoxTelefon.Text.Length; //detta är det totala antal tecken
int lngPos = textBoxTelefon.Text.IndexOf("-"); //vias antal tecken för riktnr
string riktNr = textBoxTelefon.Text.Substring(0,lngPos); //visar riktnummer OK
int teleFonLangd=helaTelefon-lngPos-1;//här är telefonnr längd
string teleFon=textBoxTelefon.Text.Substring(lngPos+1,teleFonLangd);//detta är länden på telefonnummeret.
Har svårt att förstå nogot annat.
Mitt problem är när jag sedan skall formatera(ett f-siffrigt vill jag ha som 111 11)
det är då som det spökar.
Första delen är inga problem
formatTelefon = teleFon.Substring(0,2)
men så fort som jag kommer till andra delen så bråkar det.
formatTelefon = teleFon.Substring(0,2) + " " + teleFon.Substring(3,5);
Det är tänkbart att du har rätt med längden, men jag ser inte var.Sv: Case i C#
men .hur som helst så går du utanför strängens längd...
testa
formatTelefon = teleFon.Substring(0,3) + " " + teleFon.Substring(3);
problemet är att jag tror du gör ett tankefel... Substring tar antingen en eller två parametrar den med en parameter betyder börja på detta index och gå till slutet.
Den med två parametrar (Substring(x,y) säger börja på index x och gå y steg framåt...
eftesom din sträng har 5 tecken (eller?) och du säger Substring(3,5) så börjar den ju på position 3 och tar fem steg framåt (alltså förbi slutet på strängen)
<code>
string teleFon="11111";
string formatTelefon = teleFon.Substring(0,3) + " " + teleFon.Substring(3);
</code>
formatTelefon är nu "111 11";Sv: Case i C#
Tack för din hjälp.
Men, säg den lycka som varar.
Nu skulle jag lägga in den i min class-fil(kontroller)
public static string KollaTelefon(string fileName) osv
koden här är den samma som innan, och nu är den kanon.
Jag anropar classen:
kontroller.KollaTelefon(textBoxTelefon.Text);
kontroller.KollaTelefon(textBoxMobil.Text);
kontroller.KollaTelefon(textBoxFax.Text);
Borde väll inte vara några problem, men mitt error säger:
<code>
E:\C#\SAW\SAW\kontroller.cs(44): 'SAW.kontroller.KollaTelefon(string)': not all code
paths return a value
</code>
Även här är jag frågande.
Jag försökte också göra så att om telefonnummret redan är formaterat, så skulle ingenting hända.
<code>
if(fileName.IndexOf("-"))
{
//ingenting skall hända
}
else
{
//Här skall koden komma
}
</code>
Men detta fungerar inte heller.
Hur bör jag göra?Sv: Case i C#
<code>
if(fileName.IndexOf("-"))
{
return fileName;
}
else
{
//Här skall koden komma
}
</code>Sv: Case i C#
<code>
E:\C#\SAW\SAW\kontroller.cs(48): Cannot implicitly convert type 'int' to 'bool'
</code>
Du har inget svar på detta error???
<code>
E:\C#\SAW\SAW\kontroller.cs(44): 'SAW.kontroller.KollaTelefon(string)': not all code paths return a value
</code>