Vilket är effektivast av följande?
try
{
foreach (TextBox tb in row._boxArray)
if (tb.Enabled)
{
int originalValue = int.Parse(tb.Text);
tb.Text = random.Next(row._lowerLimit, row._higherLimit + 1).ToString();
}
}catch (FormatException){}
eller
foreach (TextBox tb in row._boxArray)
if (tb.Enabled)
{
try
{
int originalValue = int.Parse(tb.Text);
tb.Text = random.Next(row._lowerLimit, row._higherLimit + 1).ToString();
}catch (FormatException){}
}
Alltså:
Bör man lägga try-catch så nära det farliga området som möjligt, eller kräver det kanske mindre resurser om man gör try-catch en enda gång i stället för 10 eller 100?
Jag tycker du skall välja alternativ 1. Sålänge som du inte vill att den skall kunna köra vidare foreach-loopen och bara spara ner exceptionet som kastas.
cokMedlem sedan dec. 2005664 inlägg Vad använder du originalvalue till? Är det endast för att validera input i textboxen? Isf kanske det är ide att skapa en class som ärver av textbox och hantera detta där istället? Bara en fundering.. :)
Isf kan du hantera det redan när du lämnar textboxen, hantera olika typera av data (datetime, double text etc.).
PhorpherMedlem sedan feb. 20002 300 inlägg Generellt vill man nog hantera fel så nära felkällan som möjligt men i det här fallet så kan det vara bättre att köra med alt. 1. Try/Catch suger rejält med prestanda.
Om du använder framework 2.0 och vill undvika exceptions helt så kan du i det här fallet använda metoden TryParse(string str, out intVal) som returnerar true om konverteringen lyckades och false om den misslyckades.
Tack för de svaren =)
Nickemannen: Nej jag har inget behov av att fortsätta foreach. =)
cok: Koden var inte färdig när jag hindrades av min fundering. Såhär ser det ut nu:
int originalValue = int.Parse(tb.Text);
tb.Text = random.Next(Math.Max((originalValue - originalValue/10 -1 ),row._lowerLimit), Math.Min((originalValue + originalValue/10 +1 ),row._higherLimit) + 1).ToString();
Jag slumpar helt enkelt ett nytt värde till textfältet som avviker max 10%av ursprungsvärdet plus/minus 1. Plus/minus är med för att 1-9 ska kunna bli mindre, och för att 0-9 ska kunna bli större. Endast positiva värden används.
Phorpher: Det låter ju som en bra grej. Om inte annat så blir det kanske mindre kod.
Nu ligger ju denna kod i ett användargränssnitt, så det är ju lite att skjuta flugor med elefantbössan. Men man är ju nyfiken!
GladhMedlem sedan maj 20012 812 inlägg
phorper skrev:
Try/Catch suger rejält med prestanda.
Det har inte jag läst, däremot så suger en exception som kastas rejält med prestanda, medans en try/catch inte tar speciellt mycket prestanda, knappt märkbar.
Men eftersom en exception suger prestanda, så skall man precis som du säger göra en TryParse istället för en try/catch om det nu är där som man kan få felet. Generellt kan man säga att alla fel som du kan förvänta dig, skall du lösa utan en try/catch, och detta är ett typ exempel på ett sådant fel, likadant med filer som inte finns...
- M