addition - C# Add Times of multiple textboxes together -


i trying add lap times first must check if there value in textbox , proceed. how do this? lap time recorded this: 01:29:30

here code:

try {     timespan diff1 = timespan.parse(lap1timetextbox.text);     timespan diff2 = timespan.parse(lap2timetextbox.text);     timespan diff3 = timespan.parse(lap3timetextbox.text);     timespan diff4 = timespan.parse(lap4imetextbox.text);     timespan diff5 = timespan.parse(lap5timetextbox.text);     timespan diff6 = timespan.parse(lap6timetextbox.text);     timespan diff7 = timespan.parse(lap7timetextbox.text);     timespan diff8 = timespan.parse(lap8timetextbox.text);     timespan diff9 = timespan.parse(lap9timetextbox.text);     timespan diff10 = timespan.parse(lap10timetextbox.text);     timespan total = diff1 + diff2 + diff3 + diff4 + diff5 + diff6 + diff7 + diff8 + diff9 + diff10;     fulltimetextbox.text = total.tostring(); } catch (exception ex) {     messagebox.show(ex.tostring()); } 

you use following approach using timespan.tryparse , timespan[]:

timespan[] laps = new timespan[10]; bool valid = timespan.tryparse(lap1timetextbox.text, out laps[0]); valid = timespan.tryparse(lap2timetextbox.text, out laps[1]); // ... valid = timespan.tryparse(lap10timetextbox.text, out laps[9]);  timespan totallaps = timespan.zero; foreach (timespan lap in laps)     totallaps = totallaps + lap; 

that works since timespan struct , cannot null. in array initialized timespan.zero. non-parsable timespans count zero.

i have tested sample values in format.


if have plenty of such controls might tedious repeat timespan.tryparse(lap1timetextbox.text, out laps[0]) every control if easy, readable , testable code.

if textboxes in same container-control (like panel or form) use folllowing linq approach:

timespan sumofalllaptimes = laptimepanel.controls.oftype<textbox>()     .where(txt => txt.name.startswith("lap", stringcomparison.invariantcultureignorecase))     .select(txt => txt.text.trygettimespan())     .where(ts => ts.hasvalue)     .select(ts => ts.value)     .sum(); 

this query uses following 2 handy extension methods:

public static timespan? trygettimespan(this string timespan, iformatprovider formatprovider = null) {     if (timespan == null) throw new argumentnullexception("timespan");     timespan ts;     bool success = timespan.tryparse(timespan, formatprovider, out ts);     if (success) return ts;     return null; }  public static timespan sum(this ienumerable<timespan> timespans) {     timespan sum = timespan.zero;     foreach (timespan ts in timespans) sum = sum + ts;     return sum; } 

Comments